2017-01-23 82 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