关于C++命名空间的一个问题

#include
using namespace std;

namespace my_space {
int size;
void print();
}
using namespace my_space;
void my_space::print() {
cout << "调用成功" << endl;
}

/*位置1*/

int main()
{
print();
return 0;
}
以上代码是在一个网课中看到的,为什么在使用了using指示后对print()的定义还要加my_space作用域名?如果去掉了my_space::系统会报错

            另外,如果我在此代码的基础上在位置1加上my_space::size=1;也会报错

error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
error C2086: “int my_space::size”: 重定义

请问这是什么原因呢?

1个回答

因为main没有写在my_space下,它和print不在一个命名空间,所以认不到。
如果你using了以后又定义,那么就重复定义了,也就是error C2086: “int my_space::size”: 重定义

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问