gpt4 book ai didi

c++ - 复制构造函数并传递类

转载 作者:行者123 更新时间:2023-11-28 04:32:14 26 4
gpt4 key购买 nike

将此还原为原始问题。将更详细的问题作为新问题发布。感谢大家对避新的帮助和建议。在此问题中传递对象实例时遇到问题。

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. 正如您在标题中指出的那样,您的 dog 类没有复制构造函数。您所做的是重载 = 运算符。

  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. 类声明末尾缺少分号 (;)

关于c++ - 复制构造函数并传递类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52570480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com