c++ - 在构造函数调用中出现错误 C2512

标签 c++ templates

当我从另一个类的构造函数调用一个类的构造函数时,出现错误 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/

相关文章:

c++ - 在 C++11 中对数组中所有元素的 OR/AND 成员进行 OR/AND 的优雅方式?

c# - 通过委托(delegate)从 C++ 调用 C# 方法会导致反向参数

c++ - 在 C++ 中声明随机数量的对象

c++ - 解决编译器错误

C++ , Cheat Engine/OllyDBG 从多级指针中找到基址 "static"

c++ - 使用 CImg 在 C++ 中进行光谱残余显着性检测

css - 好奇的 '-' 和现场时出现的空间

c++ - 非类型模板参数与函数参数

C++ 模板和类

c++ - static_pointer_cast 通过继承和模板