为了账号安全,请及时绑定邮箱和手机立即绑定

size用const int定义,但为什么会显示size不明确?

size用const int定义,但为什么会显示size不明确?

C C++
xungeer29 2017-10-04 15:40:10
#include<iostream>using namespace std;const int size=20;             // 为什么会size不明确?struct Student{ char firstname[size]; char lastname[size]; char grade; int age;};void display(Student);int main(){ Student stu;               //创建结构变量 cout << "What is your first name?"; cin.getline(stu.firstname, size); cout << "What is your last name?"; cin.getline(stu.lastname, size); cout << "What letter grade do you deserve?"; cin>>stu.grade; cout << "What is your age?"; cin >>stu.age; display(stu); return 0;}void display(Student information){ cout << "Name:" << information.lastname << " , " << information.firstname << endl  << "Grade:" << char(information.grade+1) << endl  << "Age:" << information.age << endl;}
查看完整描述

4 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

这个代码应该没有太大的错误。

你说的“显示size不明确”是什么意思?  是哪里显示的??


查看完整回答
1 反对 回复 2017-10-04
  • xungeer29
    xungeer29
    VS2017编写的,size下面有红色波浪线,鼠标放上面就显示size不明确
  • xungeer29
    xungeer29
    编译后显示 error C2872: “size”: 不明确的符号
  • onemoo
    onemoo
    这里写不开,我给你写了个新回答
?
onemoo

TA贡献883条经验 获得超454个赞

我再多说几句,不推荐用 using namespace std; 写法。

你知道C++标准库中的符号都是定义在std命名空间中的,使用它们时必须在前面写上std::来指明命名空间。

有时候觉得每次都这样写很麻烦,就用 using namespace std;  这样就可以省下写名字前面的std::。但这样做等于将 std 中的名字都暴露了出来! 如果你程序中用了和标准库中同样的名字就会发生命名冲突。要知道标准库中的名字是非常多的,要完全避免使用是很难的。

原本C++中引入命名空间就是为了避免命名冲突! 它把所有标准库里的名字都放入std中,虽然在使用库中符号时会有些麻烦,但就不会和你自己程序中的名字冲突了。

而你写 using namespace std; 等于违背了命名空间的初衷。  你这个例子就是在无意中引起了命名冲突。


一般建议使用标准库中符号时都要明确写上 std::

如果真的想要少写 std::,那么推荐另一种写法:

using std::cout;

using std::cin;

像这样明确指出想简写的名字,只把这几个名字从std命名空间中暴露出来。

这样你仍然可以在代码中直接使用 cout 和 cin。 而你再定义 size 也不会有问题(库中的 size 还在 std 中,不会和这个冲突)。

查看完整回答
1 反对 回复 2017-10-05
?
onemoo

TA贡献883条经验 获得超454个赞

VS 中 C2872 错误是指在命名检查时发现歧义。这里也就是指 size 这个名字发生命名冲突。

这有可能是与<iostream>里标准库中的命名冲突了。 不过这一点我很奇怪,我知道的 std::size 是在<iterator>中的。  也许 VC 的<iostream>中也有叫 size 的吧。

你可以试试用下面方法解决:

  • 要么,把这个变量改为别的名字(别用size)

  • 要么,去掉上一行的 using namespace std;。 在代码中用到标准库中的名字时都在前面加上 std::,如 std::cout   std::cin

用上述两种方法的任何一种都可以,再看看还会不会报这个错。

查看完整回答
1 反对 回复 2017-10-05
  • 4 回答
  • 1 关注
  • 5556 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信