2013-01-25 61 views
0

使用枚舉與命名空間有問題。帶枚舉的命名空間問題

下面是函數調用:

object->writeMessage(tmpZone->getLineOne(), tmpZone->getLine(), tmpZone->getPosition()); 

從編譯器的問題來自

tmpZone->getLine() 

的原型函數getline()從區級(這是在洞察命名空間)是:

Line getLine(); 

它在insight命名空間中返回一個枚舉類型。此函數調用位於使用名稱空間洞察下的cpp文件中;線。

編譯錯誤是

C:/WindRiver/workspace/SimpleTemplate/InsightLT.cpp:在靜態成員 函數static int insight::InsightLT::taskFunction(insight::InsightLT*)': C:/WindRiver/workspace/SimpleTemplate/InsightLT.cpp:161: error: no matching function for call to 洞察:: InsightLT ::的WriteMessage(的std :: string,線,INT) 「 C:/WindRiver/workspace/SimpleTemplate/InsightLT.cpp:82:注意: 候選人是:無效的洞察力:: InsightLT ::的WriteMessage(的std :: string, 洞察::線,INT)

我想不出爲什麼會發生這種情況。 Zone類也是在insight命名空間中定義的。任何想法傢伙?

+0

getLine()函數的原型是什麼? –

+6

請提供一個說明錯誤的完整小例子。 – Oswald

+0

'getPosition()'返回一個'int',或可轉換爲'int'的東西嗎? getLineOne()'返回一個'string',或者可以轉換爲'string'的東西?你爲什麼說這個問題來自'getLine()'?我不能從編譯器錯誤 –

回答

1

編譯器無法從insight namespace解析Line,您可以在函數定義中提供完整的命名空間,也可以在namespace insight中包裝cpp。

嘗試:

namespace insight { 
    void InsightLT::writeMessage(std::string, insight::Line, int) 
    {  
    } 
} 
+0

我已經將函數定義封裝在insight命名空間中,正如您所描述的 – gettingSmarter

+0

嘗試爲Line提供完整的namesapce以及 – billz

+0

沒有運氣。我在原型中指定了完整的命名空間以及writeMessage的定義。 – gettingSmarter

0

我能得到這個編譯,雖然我不知道爲什麼我沒有工作做。爲了完整性和封閉性,我想把它放在這裏。

我聲明瞭Line enum和名字空間範圍內的另一個枚舉以及另一個類。我刪除了枚舉並將它們放入與之前相同的名稱空間內的自己的頭文件中,現在編譯它。

我不知道我錯過了什麼,這解決了這個問題。如果有人有任何考慮,請評論這可能已經修復。

感謝那些試圖幫助和抱歉的人,我無法組裝一個顯示錯誤的例子。