ここにこのコードがあります。
#include <iostream>
using namespace std;
template <typename T> inline T bigArry(const T data[5])
{
T level = data[0];
for(T item : data) // error C2143: syntax error : missing ',' before ':' (1st)
{ //error C2143: syntax error : missing ';' before '{' (3rd)
if(level<item){ level=item; }
}
return level;
}
int main()
{
int data[5]={//five variables}
cout << bigArry(data);//see reference to function template instantiation 'T bigArry<int>(const T [])' being compiled with [ T=int] (2nd)
return 0;
}
関数 bigArry() は、5 つの要素の配列から最大値を返します。
問題は、範囲ベースのループを使用すると、コードに記載されているエラーが発生することです。しかし、通常の for を使用すると、すべてが正常に戻ります。つまり、構文は問題ないように見えますが、問題はわかりません。Visual Studio 2010 を使用しています。
他に聞きたいのは、インライン関数についてです。現在、C++ Primer Plus 6th edition を読んでいます。関数が大きすぎてインライン化できないことはいつわかりますか? コードを短くする基準はありますか? それとも、大丈夫だと「思う」ときにインライン関数を使用しますか?