簡體   English   中英

沒有合適的默認構造函數可用模板

[英]No appropriate default constructor available templates

我有一個問題,當我創建一個模板對象,我有一個構造函數但程序說不存在正確的構造函數。 怎么了?

錯誤c2512 ... VS 2015中沒有相應的默認構造函數

template <class T>
class CNODO_D
{private:
    T element;
    CNODO_D<T>* next;
    CNODO_D<T>* back;

public:
    CNODO_D(T e)
    {
        element = e;
        next = nullptr;
        back = nullptr;
    }
}

template <class T>
class CLista_S
{
private:
    CNODO<T>* begin;
    int _size;

public:CLista_S()
    {
        begin = nullptr;
        _size = 0;
    }
        void push_back(T e)
    {
        _size++;
        if (begin == nullptr)
        {
            CNODO_D<T>* n = new CNODO_D<T>(e);
            begin = n;
        }
        else
            //some other code
    }
}
    class CVida
{
private:
int vidas,x,y,ancho,alto;
int pos_inicial;
public:
CVida(int px, int py, int vid)
{
x = px;
y = py;
pos_inicial = px;
vidas = vid;
alto = 47;
ancho = 48;
}
    CLista_D<CVida>* lista_vidas= new CLista_D<CVida>();
lista_vidas->push_back(CVida, 12, 6, 9));

您在示例的最后一行使用CVida作為值。 也許你的意思是lista_vidas->push_back(CVida{12, 6, 9}) 但這不是真正的問題。

問題是CVida 沒有默認構造函數,但是您在CNODO_D<CVida>構造函數中調用CVida默認構造函數。 您應該使用成員初始化列表

template <class T>
class CNODO_D
{private:
    T element;
    CNODO_D<T>* next;
    CNODO_D<T>* back;

public:
    CNODO_D(T e)
        : element(e), next(), back() {}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM