extern constant,unnamed namespace

时间:2017-01-23 20:45:56

标签: c++ c++11

我有一个项目需要"使用未命名的命名空间创建一个常量变量",我需要与另一个.cpp文件中的函数共享它。它说变量声明可以在他们自己的文件中。使用了extern关键字,我想出了如何使用extern,在头文件中使用var并声明like extern const char varname;,在main.cpp中为其赋值,(const char varname = A;全局在上面主要功能)并能够在其他.cpp文件中使用它。但我不确定如何使用未命名的命名空间。在示例文件中,他们在主文件中包含以下内容:

namespace
{
  extern const double time = 2.0;
}

但现在有一个如何在另一个.cpp文件中访问它的示例。我尝试用我的变量做这个,我在另一个文件中得到一个错误,我试图用它说它没有在那个范围内声明。

有人可以提供一些见解,说明我应该在这里做些什么来利用这两件事吗?

2 个答案:

答案 0 :(得分:1)

您可以通过对变量的其他引用来访问它。

例如:

namespace
{
  const double time = 2.0;
  const double & local_ref_time(time); //Create a local referece to be used in this module
}


extern const double & global_ref_time(local_ref_time); //Create the global reference to be use from any other modules

答案 1 :(得分:1)

您可以尝试编写这样的访问器函数:

<强>的main.cpp

#include "other.hpp"

namespace
{
    const double time = 2.0;
}

int main()
{
    tellTime();
    return 0;
}

const double getTime()
{
    return time;
}

<强> other.hpp

#ifndef OTHER_HPP_INCLUDED
#define OTHER_HPP_INCLUDED

const double getTime();
void tellTime();

#endif // OTHER_HPP_INCLUDED

<强> other.cpp

#include <iostream>
#include "other.hpp"

void tellTime()
{
    std::cout << "Time from the anonymous namespace of main.cpp is " << getTime() << std::endl;
}

我认为任何数量的外部都不会有所帮助:https://stackoverflow.com/a/35290352/1356754