挑战:
我的这段代码无法编译。你能找出问题所在吗?有一次让我很头疼。
// header
namespace values {
extern std::string address;
extern int port;
}
// .cpp file
std::string ::values::address = "192.0.0.1";
int ::values::port = 12;
第一眼看上去是正确的。错误有多少,有哪些!?
最佳答案
一个错误:
std::string values::address = "192.0.0.1";
是正确的形式,否则解析是
std::string::values::address = "192.0.0.1";
并且在“string”中没有成员“values”和成员“address”……
它适用于内置类型,因为它们永远不能包含成员..所以 int::values 是一个明确的解析,int::values,因为先验没有意义。
std::string (::values::address) = "192.0.0.1";
也可以。请注意,如果您 typedef int sometype;您使用 sometype 时会遇到与上述字符串相同的问题,但使用“int”时不会。
关于c++ - 为什么这个单独的定义会导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2358524/