2017-01-23 81 views
2

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

namespace 
{ 
    extern const double time = 2.0; 
} 

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

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

+5

我不认为你明白你的任务。使用未命名名称空间的要点是,在其中定义的函数和变量不能从其他.cpp文件(或使用适当的术语翻译单元)中看到。 – SergeyA

+2

所述的转让似乎是矛盾的。未命名名称空间中的项目不能与任何其他翻译单元的名称共享。我想你可以用'originalfile.cpp'代码中的'#include“otherfile.cpp”'与另一个文件'共享',但这真的是作弊。 –

+0

嗯。那么它说使用未命名的名称空间声明常量,我必须与其他函数分享它,并且它不能通过引用传递。它具体建议使用extern。所以是的,我不确定它想要什么。 – windy401

回答

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; 
} 

我不认为的extern的任何款项将帮助:https://stackoverflow.com/a/35290352/1356754

+0

如果将其包含在头文件中,则不需要在main.cpp中声明'getTime()'函数声明。这是合法的C++,但它是代码重复,通常应该避免。 – SebNag

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