我有以下模板类:
#ifndef T_SIMPLE_MATRIX_H
#define T_SIMPLE_MATRIX_H
template<class T, int N>
class SMatrix {
private:
T v[N*N];
public:
SMatrix<T, N>(){}
T& operator() (int r, int c){
return v[N*r+c];
}
const T& operator()(int r, int c) const{
return v[N*r+c];
}
};
#endif //
以下主要代码:
ifstream fi(argv[1]);
int N;
fi >> N;
for (int i = 0; i < N; i++) {
int M;
fi>>M;
cout << "Matrix size " << M << endl;
SMatrix<double, M> A;
}
此代码在main.cpp中失败并给出错误:“类型为'int'的非类型模板参数不是整数常量表达式”。当我将M更改为2时,它可以用来将ifstream值传递给模板吗?
答案 0 :(得分:-1)
必须在编译时中知道模板参数,例如
SMatrix<int, 10> A;
M
的值在运行时中已知,因此不能用作模板参数。
你应该使N
构造函数的参数并使用动态分配:
std::unique_ptr<T[]> v;
v.reset(new T[N * N]);