8

挑战:

我有这个无法编译的代码。你能弄清楚什么是错的吗?曾经让我很头疼。

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

// .cpp file
std::string  ::values::address = "192.0.0.1";
int          ::values::port    = 12;

乍一看,它看起来是正确的。有多少,哪些是错误!?

4

2 回答 2

8

一个错误:

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”。

于 2010-03-01T19:44:06.753 回答
3

我玩游戏迟到了,但我更愿意将 .cpp 文件编写为:

// .cpp file
namespace values {
  std::string  address = "192.0.0.1";
  int          port    = 12;
}

当然,这并不能解决您在friend声明中遇到的问题。

于 2010-03-01T21:24:56.370 回答