爲什麼我會在賦值語句中得到「沒有匹配'getVector'的匹配函數」錯誤?如何解決錯誤說「沒有匹配的XXX函數調用」?
template <typename T>
vector<T> getVector(int);
int main() {
auto myVector = getVector(5);
...
}
template <typename T>
vector<T> getVector(int size) {
...
}
爲什麼我會在賦值語句中得到「沒有匹配'getVector'的匹配函數」錯誤?如何解決錯誤說「沒有匹配的XXX函數調用」?
template <typename T>
vector<T> getVector(int);
int main() {
auto myVector = getVector(5);
...
}
template <typename T>
vector<T> getVector(int size) {
...
}
看看你的編譯器說什麼!它試圖幫助你。
main.cpp:7:21: error: no matching function for call to 'getVector'
然後:
main.cpp:4:16: note: candidate template ignored: couldn't infer template argument
'T' std::vector<T> getVector(int);
的錯誤是很清楚的:編譯器看到你的getVector
功能,但你從來沒有說過一個「混凝土」式的以替代T
:編譯器不知道你希望這個向量被保存,所以它只是忽略那個函數模板。
你想在矢量中存儲什麼樣的值?整數例如?然後:
auto myVector = getVector<int>(5);
^give a type here
謝謝!這解釋了我的困惑。但是我還有一個問題,如果我不知道應該替代T的「具體」類型怎麼辦?就像,我想從文件中獲取數字,但我不知道這些數字是什麼類型。 – 2014-10-02 23:38:33
模板是一個*編譯時*結構:如果您在編譯時不知道'T',那麼您不能實例化模板。但是你可以使用一個可以容納任何東西的類型:例如查看'boost :: any'。這樣你就可以擁有一個'std :: vector
您定義getVector()
爲需要一個模板參數T
函數模板。需要以某種方式提供該模板參數。如果沒有T
的推導或顯式提供,則無法調用該函數。
例如,如果你正在返回矢量持有整數,您可以T
像這樣提供int
:
auto myVector = getVector<int>(5);
什麼是你想要返回向量的類型? – 0x499602D2 2014-10-01 23:46:09