次のコードは、より大きなプロジェクトの一部として私が書いた補間関数の一部です。この関数の最初のバージョンは myScalar yval を返しましたが、関数が機能したかどうかのフラグを返すように変更しました。
私の質問はこれです。次のコードは、codepad.org と小規模な Visual Studio プロジェクトの両方で単独で実行するとコンパイルされます。しかし、私の大規模なプロジェクトでは、エラー C2109 "添え字には配列またはポインター型が必要です" が表示されます。何がうまくいかないのですか?
前もって感謝します!-- ジョー
using namespace std;
template <class myScalar, class myXVec, class myYVec>
int finterp(int mode, myXVec xarray, myYVec yarray, int num_pts, myScalar xval, myScalar &yval)
{
myScalar dx, dydx, xmin, xmax;
int success_flag = 0;
if (num_pts < 1) return success_flag;
yval = yarray[0]; //Visual Studio error C2109
//some more calculations are here
success_flag = 1;
return success_flag;
}
int main()
{
double *xvec, *yvec;
xvec = new double [5]; yvec = new double [5];
for (int i = 0; i < 5; i++)
{
xvec[i] = (double)i;
yvec[i] = (double)i+1;
}
double x, y;
x = 3.0;
int success = finterp(1, xvec, yvec, 5, x, y);
cout << y << " " << success << endl;
return 0;
}
出力:
1> j:\london_study\irasshell_2011-05-13\iras_src\templateutilityfunctions.h(74):
error C2109: subscript requires array or pointer type
1> j:\london_study\irasshell_2011-05-13\iras_src\hydpowclass.cpp(41) :
see reference to function template instantiation 'int finterp<double,std::vector<_Ty>,double>(int,myXVec,myYVec,int,myScalar,myScalar &)' being compiled
1> with
1> [
1> _Ty=double,
1> myXVec=std::vector<double>,
1> myYVec=double,
1> myScalar=double
1> ]