C++ 理解';使用';关键词:C++;
有人能解释一下吗C++ 理解';使用';关键词:C++;,c++,namespaces,C++,Namespaces,有人能解释一下吗 #include <iostream> using namespace std; namespace A{ int x=1; int z=2; } namespace B{ int y=3; int z=4; } void doSomethingWith(int i) throw() { cout << i ; } void sample() throw() { using
#include <iostream>
using namespace std;
namespace A{
int x=1;
int z=2;
}
namespace B{
int y=3;
int z=4;
}
void doSomethingWith(int i) throw()
{
cout << i ;
}
void sample() throw()
{
using namespace A;
using namespace B;
doSomethingWith(x);
doSomethingWith(y);
doSomethingWith(z);
}
int main ()
{
sample();
return 0;
}
我还有一个错误:
错误:对“z”的引用不明确
这对我来说非常清楚:z
存在于两个名称空间中,编译器不知道应该使用哪一个您知道吗?通过指定名称空间来解决此问题,例如:
doSomethingWith(A::z);
你得到了一个次优的信息。更好的实现仍然会标记错误,但是说“z是不明确的”,因为这是问题所在,而不是“未声明的”
在名称z命中多个对象时:A::z和B::z,规则是实现不能只选择其中一个。您必须使用限定来解决问题。
使用
关键字用于
std::cout
模板代码>
名称空间
用于防止名称污染,这意味着两个函数/变量意外地共享了相同的名称。如果将这两个一起使用
,则会导致模糊的z
。我的g++4.8.1报告了错误:
abc.cpp: In function ‘void sample()’:
abc.cpp:26:21: error: reference to ‘z’ is ambiguous
doSomethingWith(z);
^
abc.cpp:12:5: note: candidates are: int B::z
int z=4;
^
abc.cpp:7:5: note: int A::z
int z=2;
^
这是意料之中的。我不确定您使用的是哪种gnu编译器,但这是一个可预测的错误。您希望发生什么?该错误具有误导性。我认为发布的代码不是您编译并给出发布错误的代码。@很快感谢您更正使用关键字。我不小心写错了。AFAIU使用的
的“typedef版本”也可以在没有模板的情况下使用,例如使用integer=int代码>。
abc.cpp: In function ‘void sample()’:
abc.cpp:26:21: error: reference to ‘z’ is ambiguous
doSomethingWith(z);
^
abc.cpp:12:5: note: candidates are: int B::z
int z=4;
^
abc.cpp:7:5: note: int A::z
int z=2;
^