こんにちは、以下をコンパイルするとエラーが発生します。これらを [10][20] のような const 値に変更すると機能しますが、これが宣言であっても変数が気に入らないように見えるため、寸法を変更する必要はありません。なぜこのエラーが発生するのか混乱しています。助けてください。以下のコードを参照してください。
#include <iostream>
template <size_t X, size_t Y>
void fun (int (&array)[X][Y])
{
std::cout << " do something fun " << std::endl;
}
int main ( int argc, char *argv[] )
{
size_t row (10);
size_t col (20);
int data1[10][20];
fun ( data1 );// compiles
int data2[row][col];
fun ( data2 );// fails
return 0;
}
g++ -I/usr/include -I/usr/local/include -std=c++11 -pthread -O3 -Wall -c main.cpp -o main.o
main.cpp: In function ‘int main(int, char**)’:
main.cpp:18:15: error: no matching function for call to ‘fun(int [(((sizetype)(((ssizetype)row) + -1)) + 1)][(((sizetype)(((ssizetype)col) + -1)) + 1)])’
main.cpp:18:15: note: candidate is:
main.cpp:4:6: note: template<long unsigned int X, long unsigned int Y> void fun(int (&)[X][Y])
main.cpp:4:6: note: template argument deduction/substitution failed:
main.cpp:18:15: note: variable-sized array type ‘int [(((sizetype)(((ssizetype)row) + -1)) + 1)][(((sizetype)(((ssizetype)col) + -1)) + 1)]’ is not a valid template argument
make: *** [main.o] Error 1