【发布时间】:2017-01-23 20:45:55
【问题描述】:
我有一个项目需要“使用未命名的命名空间创建一个常量变量”,我需要与另一个 .cpp 文件中的函数共享它。它说变量声明可以在他们自己的文件中。提到了 extern 关键字的使用,我想出了如何使用 extern,将 var 放在头文件中并声明 like extern const char varname;,在我的 main.cpp 中为其分配了一个值,(const char varname = A; 全局高于 main 函数)并且能够在另一个 .cpp 文件中使用它。但我不确定如何使用未命名的命名空间。在示例文件中,它们在主文件中有以下内容:
namespace
{
extern const double time = 2.0;
}
但是现在有一个如何在另一个 .cpp 文件中访问它的示例。我尝试使用我的变量执行此操作,但在尝试使用它的另一个文件中出现错误,说它未在该范围内声明。
有人可以提供一些关于我应该在这里做什么来利用这两个东西的见解吗?
【问题讨论】:
-
我不认为你理解你的任务。使用未命名命名空间的关键在于,其中定义的函数和变量对于其他 .cpp 文件(或者,使用正确的术语,翻译单元)是不可见的。
-
所述的分配似乎在术语上是矛盾的。未命名命名空间中的项目不能按名称与任何其他翻译单元共享。我想您可以在
originalfile.cpp代码中通过#include "otherfile.cpp"与另一个文件“共享”,但这确实是作弊。 -
嗯。好吧,它说使用未命名的命名空间声明常量,我必须与其他函数共享它,并且它不能通过引用传递。它特别建议使用extern。所以是的,我不确定它想要什么。
-
extern和unnamed namespace不能真正一起使用,因为命名空间在该翻译单元中创建了一个唯一的命名空间,导致 extern 变量在另一个翻译单元中无法找到。您可以将常量放在头文件的未命名命名空间中,但从链接器的角度来看,从技术上讲,它是两个具有相同值的不同常量,而不是共享常量。