Что здесь не так? Странное сообщение об ошибке (для меня) - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь настроить класс в C ++, но получаю сообщение об ошибке. У кого-нибудь есть идеи?

class ClassX
{
public:
    ClassX** _owner;
    QVector<ClassX*> objects;

    ClassX( size_t start, size_t length, QString type = "" ) {
        _owner = nullptr;
    }


    ClassX(ClassX** owner) {
        _owner = owner;
    }

    ClassX(int i, ClassX** owner) {
        _owner = owner;
    }

    // working
    void add(){
        objects.append( new ClassX (*this));
    }

    // not working: error: no matching function for call to ‘ClassX::ClassX(int, ClassX&)’
    void add2(){
        objects.append( new ClassX (3, *this));
    }    
};

Я не знаю, что сказать. Я думаю, что сократил код до минимума, необходимого для понимания.

1 Ответ

1 голос
/ 01 апреля 2020

Похоже, вы пытаетесь вызвать этот конструктор: ClassX(int i, ClassX** owner), но когда вы вызываете его с помощью objects.append(new ClassX (3, (*this)), вы не указываете правильный тип для использования этого конструктора.

Когда вы используйте *this (специальный указатель на используемый в данный момент объект), вы разыменовываете его, что создает экземпляр ClassX& - ссылку на ClassX объект. Это не то же самое, что двойной указатель, который вы указали во втором конструкторе, поэтому компилятор ожидает найти другой конструктор со следующим объявлением ClassX::ClassX(int, ClassX&).

. Вы можете просто изменить конструктор следующим образом: ClassX(int i, ClassX &owner).

...