Нет подходящего конструктора по умолчанию, доступных шаблонов - PullRequest
0 голосов
/ 04 мая 2019

У меня проблема при создании объекта шаблона, у меня есть конструктор, но программа сказала, что не существует корректного конструктора.Что не так?

Ошибка 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));

1 Ответ

0 голосов
/ 04 мая 2019

Вы используете CVida в качестве значения в последней строке вашего примера.Возможно, вы имели в виду lista_vidas->push_back(CVida{12, 6, 9})?Это не настоящая проблема, хотя.

Проблема в том, что CVida не имеет конструктора по умолчанию , но вы вызываете конструктор CVida по умолчанию в конструкторе CNODO_D<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() {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...