将其恢复为原始问题。将更详细的问题发布为新问题。感谢大家为避免这种情况提供的帮助和建议。在此问题中传递对象实例时遇到麻烦。
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;
}
答案 0 :(得分:1)
有两个问题。
您没有在您的狗类中使用的复制构造函数,如标题中所示。您所做的就是重载=运算符。
您正试图将iDogClassOne
作为指向animalClass:: setDogOne()
的指针,但是animalclass::setDogOne
会通过值而不是引用或指针来接收参数。
您可以使用取消引用运算符*iDogClassOne
。这几乎告诉编译器您希望传递iDogClassOne指向的对象。
dogClass* iDogClassOne = new dogClass();
iAnimalClass->setDogOne(*iDogClassOne);
或者更好的方法,您可以完全删除堆分配
dogClass dogobj;
iAnimalClass->setDogOne(dogobj);
与(2)中描述的问题相同。但是这次,您的animalclass::getDogOne
通过引用接收了参数。可以通过修改getdogone
或/和传递指针来轻松解决。我将保持原样。如果您仍然需要帮助,请在评论中让我知道,并将进行进一步编辑。但我建议您先尝试一下。
在类声明的末尾缺少分号(;)