在构造函数调用中收到错误 C2512

Getting error C2512 in constructor call

本文关键字:错误 C2512 函数调用      更新时间:2023-10-16

当我从另一个类的构造函数调用一个类的构造函数时,我收到错误 C2512。我在文件底部使用模板实例,这样我就不必在标头中实现成员函数。通常,这是由于没有默认构造函数引起的,但我有。

维克·

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':没有合适的默认构造函数可用

所以我尝试向我的 vecimp 类添加一个默认构造函数,但随后它给了我编译器错误 C2275,与现在相同。

问题是你尝试创建一个vecimp<TYPE>的实例,但vecimp不是模板化结构。

如此简单

this->imp = 
    new vecimp
    (arr, n);

会正常工作。