這個問題可能與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編譯器檢查()。爲什麼我不能在第一塊代碼中得到同樣的錯誤?
你確定你試過那個確切的代碼嗎?第一行末尾有一個分號丟失。 –
第一個代碼是非法的,要麼你沒有發佈你的確切代碼;或者你編譯的代碼不是你認爲的那樣。 –
我重新輸入了代碼而不是複製和粘貼,但我編輯了帖子以添加分號。最初有一個分號。 – Kerry