2017-04-20 23 views
2
template <typename T> 
class A { 
    int func(T a); 
}; 

template <typename V> 
int A<V>::func(V a) { 
    return 0; 
} 

在Visual Studio 2017中,當我編寫上面的代碼時,編輯器顯示Function denfinition for 'func' not found,並且它建議我創建一個新的,它使用typename T。不過,我仍然可以編譯並運行成功。不同的C++模板類型名定義是指同一個嗎?

它真的讓我困惑。這是Visual Studio中的錯誤嗎?請問int A<V>::func(V a)和A類的int func(T a)一樣嗎?

在所有聲明和定義中編寫相同的類型名稱是否是一種很好的做法?

+2

該代碼是正確的C++,並且因爲它編譯和運行成功,它不是MSVC編譯器的錯誤。 Visual Studio編輯器的錯誤?當然,但我通常會用編輯器的錯誤/警告信息,直到我實際編寫了代碼。 –

+0

@chris這是IDE中顯示的智能感知「錯誤」。這不是編譯器錯誤。 –

+0

@FrançoisAndrieux,我的壞,我認爲這是一個警告。 – chris

回答

4

這是Visual Studio中的錯誤嗎?

是的,這是Intellisense中的錯誤(正如您可以編譯和運行的事實所顯示的那樣)。

是否int A<V>::func(V a)正好相同Aint func(T a)

類是A<V>A類模板),但肯定的。

在所有聲明和定義中編寫相同的類型名稱是否是一種很好的做法?

也許,爲了最大限度地清晰你的代碼。

如果沒有理由更改模板參數的名稱,請不要更改它。

相關問題