复制构造函数并传递类

时间:2018-09-29 16:47:34

标签: c++ vector

将其恢复为原始问题。将更详细的问题发布为新问题。感谢大家为避免这种情况提供的帮助和建议。在此问题中传递对象实例时遇到麻烦。

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 :(得分:1)

有两个问题。

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