2010-03-01 93 views
8

挑戰:爲什麼這個單獨的定義會導致錯誤?

我有這段代碼無法編譯。你能弄清楚什麼是錯的?它給我造成了一次頭痛。

// header 
namespace values { 
    extern std::string address; 
    extern int port; 
} 

// .cpp file 
std::string ::values::address = "192.0.0.1"; 
int   ::values::port = 12; 

它看起來正確的第一眼。有多少,哪些是錯誤!?

+0

編譯器說了什麼? – 2010-03-01 19:41:20

+0

你知道答案了嗎?聽起來是這樣的;) – 2010-03-01 19:44:00

+0

@Nikolai,嘗試沒有xD更具挑戰性 – 2010-03-01 19:44:38

回答

8

一個錯誤:

std::string values::address = "192.0.0.1"; 

是適當的形式,否則分析是

std::string::values::address = "192.0.0.1"; 

並且沒有部件「的值」與「串」內部的部件的「地址」 ..

它將適用於內置類型,因爲它們不能包含成員..所以int :: values是一個不可否認的解析,int :: values,因爲先前沒有意義。

std::string (::values::address) = "192.0.0.1"; 

也有效。請注意,如果你鍵入int int sometype;你可能會遇到同樣的問題,就像使用字符串一樣使用某種類型,而不是使用「int」。

+0

哈,你是贏家。整潔:) – 2010-03-01 19:50:12

+0

固定。根據litb的更正。 – 2010-03-01 20:15:17

3

,我遲到了比賽,但我寧願寫.cpp文件爲:

// .cpp file 
namespace values { 
    std::string address = "192.0.0.1"; 
    int   port = 12; 
} 

當然,這並不解決您曾與friend申報的問題。

+0

我懷疑我的「地址」的東西最初的例子是跛腳:)朋友的例子好多了。我同意你的看法,這種定義是更好的:) – 2010-03-01 21:35:26

相關問題