我有一个自定义模板,我想在我的C ++类中初始化。我想直接设置它的大小。
模板类,vector3d.hh
template <typename T>
class vector3d {
public:
vector3d(size_t d1=0, size_t d2=0, size_t d3=0, T const & t=T()) :
d1(d1), d2(d2), d3(d3), data(d1*d2*d3, t){}
T & operator()(size_t i, size_t j, size_t k) {
return data[i*d2*d3 + j*d3 + k];
}
T const & operator()(size_t i, size_t j, size_t k) const {
return data[i*d2*d3 + j*d3 + k];
}
private:
size_t d1,d2,d3;
std::vector<T> data;
};
我想要初始化模板变量的类:
#include "vector3d.hh"
class foo{
public:
vector3d<int> testvector(1000,2000,3000);
}
但是尝试编译此代码会生成以下错误,指向我初始化的vector3d:
错误:数字常量之前的预期标识符
我知道这不是我们在课堂上构建这样的东西的意思。这样做的正确错误是什么?假设我不能使用新的C ++ 11标准。
答案 0 :(得分:4)
“假设我不能使用新的C ++ 11标准” - 在这种情况下,您无法在其声明中初始化非静态成员。您必须在构造函数中执行此操作:
vector3d<int> testvector;
foo() : testvector(1000,2000,3000) {}
在现代C ++中,您可以在那里初始化它,但不能使用()
。课堂初始化只能使用=
或{}
:
vector3d<int> testvector{1000,2000,3000};