我對C++很陌生,我遇到了這個錯誤:第2行爲。我沒有得到它想要告訴我的。我是否應該在第二行添加size_type
之後的其他類型?C++ size_type沒有命名一個類型
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
FYI:使用gcc/g++ 4.9.2
我對C++很陌生,我遇到了這個錯誤:第2行爲。我沒有得到它想要告訴我的。我是否應該在第二行添加size_type
之後的其他類型?C++ size_type沒有命名一個類型
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
FYI:使用gcc/g++ 4.9.2
讓我們來看看一個普通的功能,而不是一個函數模板。
int add_two(int in)
{
return (in + 2);
}
int
之前的函數名是返回類型。如果編譯器無法確定它代表某種類型,則會將其報告爲錯誤。如果你有一個錯字,寫
imt add_two(int in)
{
return (in + 2);
}
編譯器會抱怨imt
不是一個類型。
函數模板還必須具有返回類型。你有:
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
在這裏,你有size_type
之前的函數名稱。如果編譯器無法確定size_type
確實是一種類型,它將會抱怨。如果size_type
是已知類型,則編譯器將繼續使用該類型作爲函數的返回類型。
您可以使用:
template<class vecType>
typename std::vector<vecType>::size_type len(vector<vecType> inVector) {
...
}
讓編譯器知道std::vector<vecType>
有一個叫做size_type
類型和函數的返回值是類型。您將需要使用typename std::vector<vecType>::size_type
,因爲它是從屬類型名稱。有關該主題的更多信息,請參閱Where and why do I have to put the "template" and "typename" keywords?。
此外,您必須修復函數中變量vecSize
的聲明。
template<class vecType>
typename std::vector<vecType>::size_type len(vector<vecType> inVector) {
typename std::vector<vecType>::size_type vecSize = inVector.size();
return vecSize;
}
如果你能使用C++編譯器11,可以簡化變量聲明
auto vecSize = inVector.size();
嘗試
vector<vecType>::size_type vecSize = inVector.size();
爲什麼倒票?我的回答是在上面的兩條評論和g ++文檔中提出的。 – user481779
「名」在這種情況下,一個動詞。這意味着'size_type'不是數據類型的名稱。這意味着你還沒有告訴編譯器'size_type'是什麼。 –
'size_type'通常附加到另一個類,例如'vector :: size_type' – user4581301
相關:http://stackoverflow.com/questions/4849632/vectorintsize-type-in-c – user4581301