有一种方法来初始化一个数组,像这样:初始化类对象阵列
static const vec3d<long> XI[Q] = {
vec3d<long>(0, 0, 0),
vec3d<long>(-1, 0, 0), vec3d<long>(0,-1, 0), vec3d<long>(0, 0,-1),
vec3d<long>(-1,-1, 0), vec3d<long>(-1, 1, 0), vec3d<long>(-1, 0,-1), [etc]
};
其中
00039 template<typename TYPE>
00040 class vec3d : public vec<TYPE>{
00041 public:
00042
00049 vec3d() : vec<TYPE>(0, 3){};
00057 vec3d(TYPE right) : vec<TYPE>(right, 3){};
00065 vec3d(TYPE X_val, TYPE Y_val, TYPE Z_val) : vec<TYPE>(0, 3){
00066 this->val[0] = X_val;
00067 this->val[1] = Y_val;
00068 this->val[2] = Z_val;
00069 };
00077 vec3d(vec3d<TYPE>& right) : vec<TYPE>(0, 3){
00078 this->val[0] = right[0];
00079 this->val[1] = right[1];
00080 this->val[2] = right[2];
00081 }; [etc] };
和
00040 template<typename TYPE>
00041 class vec{
00042 public:
00047 TYPE *val;
00052 int dimension;
00053 public:
00060 vec();
00066 vec(TYPE right);
00073 vec(TYPE right, int _dimension);
00081 vec(vec<TYPE> &right);
00082
00087 ~vec();
00088
00089
00090 TYPE& operator[](int right);
00091 vec<TYPE>& operator=(TYPE right);
00092 vec<TYPE>& operator=(vec<TYPE> &right);
[etc] };
来源是:
00049 template<typename TYPE>
00050 vec<TYPE>::vec(TYPE right, int _dimension){
00051 dimension = _dimension;
00052 val = new TYPE[_dimension];
00053 assert(val);
00054 for(int i = 0; i < dimension; i++) val[i] = right;
00055
00056 };
00075 template<typename TYPE>
00076 TYPE& vec<TYPE>::operator[](int right){
00077 assert((right < dimension));
00078 assert(right >= 0);
00079 assert(val);
00080 return val[right];
00081 };
是构造函数。 Q被声明为“static const int”,所以它应该满足C++标准是非变量的,对吗?
编译器说: 错误:呼叫没有匹配功能 'ALBM :: vec3d :: vec3d(ALBM :: vec3d)' vec3d.h:77:2:注意:考生:ALBM :: vec3d: :vec3d(albm :: vec3d &)[with TYPE = long int]
显然有问题,我不能在这里通过vec3d &。有一些解决方法吗?首先定义每个单独的载体似乎是一个解决方案。虽然是一个谜题...
对不起,我的愚蠢问题......也许这个线程存在某处,但我没有找到它。可能这个问题有一些我不知道的特殊名字 - 因此我不能谷歌它! “扩展初始化列表”,“一流的数组初始化”和这样的没有做的伎俩......
SOLUTION:一些后处理在这里...也许如此。其他遭遇相同的概率: 拷贝构造函数缺乏一个“常量”:
00077 vec3d(const vec3d<TYPE>& right) : vec<TYPE>(0, 3){
00078 this->val[0] = right.val[0];
00079 this->val[1] = right.val[1];
00080 this->val[2] = right.val[2];
而且我不能访问权[直接] - 我的猜测是有原因的将是模板式的 - 但right.val []是诀窍!
发布*最小*和*完整*代码示例。 –
编辑:希望这有助于? – 0815ZED