挑战:
我的代码无法编译。你能弄明白什么是错的吗?它给我带来了一次头痛。
// header
namespace values {
extern std::string address;
extern int port;
}
// .cpp file
std::string ::values::address = "192.0.0.1";
int ::values::port = 12;
第一眼看上去是正确的。有多少,哪些是错误!?
答案 0 :(得分:8)
一个错误:
std::string values::address = "192.0.0.1";
是正确的形式,否则解析是
std::string::values::address = "192.0.0.1";
并且“string”中没有成员“地址”的成员“值”...
它适用于内置类型,因为它们不能包含成员..所以int :: values是一个明确的解析,int :: values,因为先验没有意义。
std::string (::values::address) = "192.0.0.1";
也有效。注意,如果你键入def int sometype;使用sometype时遇到的问题和上面的字符串一样,但不是“int”。
答案 1 :(得分:3)
我已经迟到了,但我宁愿把.cpp文件写成:
// .cpp file
namespace values {
std::string address = "192.0.0.1";
int port = 12;
}
当然,这并不能解决您使用friend
声明所遇到的问题。