当我从另一个类的构造函数调用一个类的构造函数时,出现错误 C2512。我在文件底部使用模板实例,这样我就不必在文件头中实现成员函数。通常,这是由于没有默认构造函数造成的,但我有。
vec.h
template <class TYPE> class vec {
struct vecimp;
vecimp *imp;
public:
vec() { }
vec(const TYPE *, size_t);
~vec();
};
vec.cpp
#include "vec.h"
template <class TYPE> struct vec<TYPE>::vecimp {
TYPE *arr;
size_t n;
vecimp(const TYPE *arr, size_t n)
{
this->arr = (TYPE *) malloc(n * sizeof(TYPE));
this->n = n;
}
~vecimp()
{
free(this->arr);
this->arr = NULL;
}
};
template <class TYPE> vec<TYPE>::vec(const TYPE *arr, size_t n)
{
this->imp =
new vecimp
<TYPE> // C2512 occurs here
(arr, n);
}
// member function implementations, dtor, etc
template class vec<int>;
这是错误消息文本
'vec::vecimp': no appropriate default constructor available
所以我尝试将默认构造函数添加到我的 vecimp
类中,但随后它在与现在相同的位置给了我编译器错误 C2275。
最佳答案
问题是您尝试创建 vecimp<TYPE>
的实例,但是 vecimp
不是模板化结构。
很简单
this->imp =
new vecimp
(arr, n);
会工作得很好。
关于c++ - 在构造函数调用中出现错误 C2512,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35538000/