を試してみてください。
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();
「名前」に、変数の宣言を簡素化することができ、この場合では動詞です。 'size_type'はデータ型の名前ではありません。コンパイラに 'size_type'が何であるかを伝えていないことを意味します。 –
'size_type'は通常' vector :: size_type'のような別のクラスにアタッチされています – user4581301
関連:http://stackoverflow.com/questions/4849632/vectorintsize-type-in-c – user4581301