【发布时间】:2019-01-02 20:56:13
【问题描述】:
我正在尝试编写一个 C++ 程序,但在复制分配部分遇到了很大的困难。这是我的代码:
#include <iostream>
using namespace std;
class CarCounter {
public:
CarCounter();
CarCounter& operator=(const CarCounter& objToCopy);
void SetCarCount(const int setVal) {
carCount = setVal;
}
int GetCarCount() const {
return carCount;
}
private:
int carCount;
};
CarCounter::CarCounter() {
carCount = 0;
}
// FIXME write copy assignment operator
/* Your solution goes here */
CarCounter& CarCounter::operator=(const CarCounter& objToCopy) {
CarCounter nobj;
cout << objToCopy.carCount << endl;
nobj.carCount = objToCopy.carCount;
cout << nobj.carCount << endl;
cout << *this << endl;
return *this;
}
int main() {
CarCounter frontParkingLot;
CarCounter backParkingLot;
frontParkingLot.SetCarCount(12);
backParkingLot = frontParkingLot;
cout << "Cars counted: " << backParkingLot.GetCarCount();
return 0;
}
输出是:
main.cpp: 在成员函数‘CarCounter& CarCounter::operator=(const CarCounter&)': main.cpp:30:9: 错误:'operator
我知道这可能是一个明显的新手错误,但我是 C++ 新手。我很感激我能得到的所有帮助。谢谢!
【问题讨论】:
-
您希望
cout << *this做什么?为什么首先在赋值运算符中有输出语句? -
他最有可能将这些用于调试目的......我想。
-
半相关:
CarCounter满足the Rule of Zero的要求。不需要赋值运算符。您可以将其省略或在类中声明为CarCounter& operator=(const CarCounter& objToCopy) = default;,以明确该类使用默认分配逻辑。 -
编译器应该如何知道如何打印
CarCounter?如果您希望能够直接将<<运算符与CarCounter一起使用,则需要通过重载类的运算符来告诉编译器您希望如何打印对象。 -
请给您的问题一个更具描述性的标题。几乎所有的问题都是关于如何解决问题的,所以这是没有用的。