2011-11-05 92 views
0

使用最新版本的NetBeans運行Ubuntu 11.10的默認安裝。我有類似以下內容:爲什麼編譯器不顯示這些返回類型的錯誤?

class MyClass { 
    public: 
     Type1 RunAlgo(); 
    private: 
     Type2 Run(); 
} 

Type1 MyClass::RunAlgo() { 
    //additional code 
    return Run(); 
} 

Type2 Run() { 
    //additional code 
    Type2 obj; 
    return obj; 
} 

Type1和Type2是完全無關的。我在編寫Run()方法時,通過在返回類型中輸入一個拼寫錯誤而驚訝於編譯它。我只是想知道爲什麼這不會返回一個錯誤,只是編譯好嗎?我錯過了什麼?

編輯:新樣本。這確實會產生一個獨立項目的錯誤。似乎無法發現爲什麼真正的項目確實會編譯。

class Node { }; 

//only difference here is that in my code I have a custom comparer 
typedef map<Node*, map<Node*, double> > Network; 

class HMM { 
    Network _network; 
}; 

class Algorithm { 
    public: 
     HMM RunAlgo(); 
    private: 
     Network _network; 
     Network Run(); 
}; 

HMM Algorithm::RunAlgo() { 
    return Run(); 
} 

Network Algorithm::Run() { 
    return _network; 
} 

EDIT2:

我爲我的先天存在缺陷的問題,例如道歉。我將來會更加小心地舉例說明。我一直工作了10多個小時,失去了重點。以下示例重現了我的情況:

#include <map> 

using std::map; 

class Node { 

}; 

typedef map<Node*, map<Node*, double> > Network; 

class HMM { 
    public: 
     HMM(const Network& network) {}; 
    Network _network; 
}; 


class TestClass { 
    public: 
     HMM RunAlgo(int x, int y); 
    private: 
     Network _network; 
     Network Run(); 
}; 

HMM TestClass::RunAlgo(int x, int y) { 
    return Run(); 
} 

Network TestClass::Run() { 
    return _network; 
} 

向HMM類中添加該特定構造函數後,其編譯時沒有問題。我不知道這是可以做到的,因爲這是我第一次遇到這種情況。我再次道歉,如果我浪費了你的時間,我感謝你試圖幫助我。

+1

是「一些參數」和「一些參數」的錯字?或缺少分號?他們是問題的一部分嗎?請出示您的_real_測試用例,以便我們不必浪費寶貴的時間猜測。 –

+0

我的錯誤。將編輯出一些參數。他們對案件並不重要。我對這種混亂表示抱歉。 – Morat

+0

也許'Type1'和'Type2'不像你想象的那樣無關。請發佈他們的聲明(至少是他們的構造函數和賦值運算符) – Mat

回答

1

修復了您的非測試用例中的錯誤後,my compiler does error out

您的陳述Type1Type2不相關必須是錯誤的。

下次考慮真正的測試用例。

1

您沒有顯示您的實際代碼;你給我們的例子,不進行編譯(在Debian/SID/AMD64 GCC 4.6)

% g++ -Wall exmorat.cc 
exmorat.cc:3:9: error: 'Type1' does not name a type 
exmorat.cc:5:9: error: 'Type2' does not name a type 
exmorat.cc:8:7: error: expected initializer before 'MyClass' 

但是你介紹時,你有轉換或鑄造參與可能發生。您應該顯示您的實際代碼(或顯示症狀的簡化代碼)以獲得真正的幫助。

+1

他/她應該已經使用一段簡單的代碼(或「測試用例」)作爲_debugging_的基本基礎的一部分。 –

+0

這些課程太大,無法在這裏發佈。我試圖用簡化版本的代碼複製這種情況,但在這種情況下它確實會產生錯誤。我似乎無法看到兩種情況之間有任何明顯的差異。 – Morat

相關問題