Копировать конструкторы и проходящие классы вокруг - PullRequest
0 голосов
/ 29 сентября 2018

Возвращаясь к исходному вопросу.Собираюсь опубликовать более подробный вопрос как новый вопрос.Спасибо всем за помощь и советы, чтобы избежать нового.Возникли проблемы с передачей объектов в этом вопросе.

class dogClass {
public:
    void setVariableA(std::vector<double> newNum) {
        variableA.push_back(newNum);
    }
    dogClass &dogClass::operator=(const dogClass &src) {
        variableA = src.variableA;
        return *this;
    }
private:
    std::vector<std::vector<double>> variableA;
};

class animalClass {
public:
    void getDogOne(dogClass &dogOne) {
        dogOne = dogs[0];
    }
    void setDogOne(dogClass dogOne) {
        dogs.push_back(dogOne);
    }
private:
    std::vector<dogClass> dogs;
};


int main() {
    animalClass* iAnimalClass = new animalClass();
    dogClass* iDogClassOne= new dogClass();

    iAnimalClass->setDogOne(iDogClassOne);

    std::vector<double> newNum;
    newNum.push_back(12);
    newNum.push_back(15);

    iDogClassOne->setVariableA(newNum);

    dogClass iDogClassTwo;

    iAnimalClass->getDogOne(iDogClassTwo);

    //Why are iDogClassOne and iDogClassTwo not equal.
    return 0;

}

1 Ответ

0 голосов
/ 29 сентября 2018

Есть пара вопросов.

  1. у вас нет конструктора копирования для вашего класса собаки, как вы указали в заголовке.то, что вы сделали, перегружено оператором =.

  2. вы пытаетесь передать iDogClassOne как указатель на animalClass:: setDogOne(), но animalclass::setDogOne получает аргументы по значению, а не как ссылкуили указатель.

    Вы можете использовать оператор разыменования *iDogClassOne.это в значительной степени говорит компилятору, что вы хотите передать объект, на который указывает iDogClassOne.

    dogClass* iDogClassOne = new dogClass();
    iAnimalClass->setDogOne(*iDogClassOne);
    

    или, если лучше, вы можете полностью удалить выделение кучи

    dogClass dogobj;
    iAnimalClass->setDogOne(dogobj);
    
  3. та же проблема, что описана в (2).но на этот раз ваш animalclass::getDogOne получает аргументы по ссылке. Это снова можно легко исправить, изменив getdogone или / и передав указатель.Я оставлю это как есть.если вам все еще нужна помощь, дайте мне знать в комментариях и отредактируйте ее дальше.но я призываю вас попробовать сначала.

  4. вам не хватает точки с запятой (;) в конце объявлений класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...