为什么这个单独的定义会导致错误?

Joh*_*itb 8 c++ header declaration extern

挑战:

我有这个代码无法编译.你能弄明白什么是错的吗?它给我带来了一次头痛.

// header
namespace values {
  extern std::string address;
  extern int port;
}

// .cpp file
std::string  ::values::address = "192.0.0.1";
int          ::values::port    = 12;
Run Code Online (Sandbox Code Playgroud)

第一眼看上去是正确的.有多少,哪些是错误!?

Jac*_*osh 8

一个错误:

std::string values::address = "192.0.0.1"; 
Run Code Online (Sandbox Code Playgroud)

是正确的形式,否则解析是

std::string::values::address = "192.0.0.1"; 
Run Code Online (Sandbox Code Playgroud)

并且"string"中没有成员"地址"的成员"值"...

它适用于内置类型,因为它们不能包含成员..所以int :: values是一个不明确的解析,int :: values,因为先前没有意义.

std::string (::values::address) = "192.0.0.1"; 
Run Code Online (Sandbox Code Playgroud)

也有效.注意,如果你键入def int sometype; 使用sometype时遇到的问题和上面的字符串一样,但不是"int".