挑战:
我有这个无法编译的代码。你能弄清楚什么是错的吗?曾经让我很头疼。
// header
namespace values {
extern std::string address;
extern int port;
}
// .cpp file
std::string ::values::address = "192.0.0.1";
int ::values::port = 12;
乍一看,它看起来是正确的。有多少,哪些是错误!?
挑战:
我有这个无法编译的代码。你能弄清楚什么是错的吗?曾经让我很头疼。
// 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";
并且在“字符串”中没有成员“值”与成员“地址”......
它适用于内置类型,因为它们永远不能包含成员。所以 int::values 是一个明确的解析,int ::values,因为先验没有意义。
std::string (::values::address) = "192.0.0.1";
也可以。请注意,如果您 typedef int sometype; 使用 sometype 会遇到与上面的 string 相同的问题,但不会使用“int”。
我玩游戏迟到了,但我更愿意将 .cpp 文件编写为:
// .cpp file
namespace values {
std::string address = "192.0.0.1";
int port = 12;
}
当然,这并不能解决您在friend
声明中遇到的问题。