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

标签 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;

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

最佳答案

一个错误:

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/

相关文章:

c++ - 为什么我的窗口中的按钮在 C++ 中看起来很旧?

php - 推荐网站没有被网络服务器重写

c++ - 为什么必须在 C++ 类定义中声明方法?

variables - 在 C# 和 VB 中声明时变量的默认值?

c++ - SDL2 无法正确链接

c++ - OpenGL:两个顶点数组 + 两个索引数组

c++ - 面试题; Effective C++ 的主题是什么?

android - 如何使用 iTextLibrary 在动态 pdf 中添加页眉和页脚?

http - Safari iFrame HTTP header 重定向问题

Javascript原型(prototype)检查区分 "function declaration"和 "function expression",为什么?