2016-03-04 50 views
0

這個問題可能與C++在編譯時如何處理指針有關,但是這是在學習泛型時出現的。我有以下代碼(不給我在Visual Studio中的任何錯誤):C++限制泛型中的類型(和指針問題)

class myClass { int x; }; 

template<typename T> 
int myFunc(T obj) 
{ 
    return obj.someMethod(); 
} 

int main(int argc, char *argv[]) 
{ 
    myClass obj = myClass(); 
    myFunc(obj); 
} 

顯然,「myClass的」沒有的someMethod(),但Visual Studio中並沒有給我任何錯誤。但是,當我改變myFunc的這樣:

template<typename T> 
int myFunc(T *obj) 
{ 
    return obj->someMethod(); 
} 

我得到一個錯誤,我認爲這是因爲myClass的不具有的someMethod編譯器檢查()。爲什麼我不能在第一塊代碼中得到同樣的錯誤?

+3

你確定你試過那個確切的代碼嗎?第一行末尾有一個分號丟失。 –

+1

第一個代碼是非法的,要麼你沒有發佈你的確切代碼;或者你編譯的代碼不是你認爲的那樣。 –

+0

我重新輸入了代碼而不是複製和粘貼,但我編輯了帖子以添加分號。最初有一個分號。 – Kerry

回答

2

通過值都傳遞和使用指針失敗對我來說有g ++以及鐺通過引用傳遞++ 鐺++版本爲3.6.1 G ++是4.9.2

版本,如果你能重現這一視覺工作室,文件他們的編譯器有一個錯誤。

+0

我也在Visual Studio中檢查過,構建失敗。 @K。你是否確定你正在編譯正確的文件? –