【问题标题】:How to pass a custom class to std::cout?如何将自定义类传递给 std::cout?
【发布时间】: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 &lt;&lt; *this 做什么?为什么首先在赋值运算符中有输出语句?
  • 他最有可能将这些用于调试目的......我想。
  • 半相关:CarCounter满足the Rule of Zero的要求。不需要赋值运算符。您可以将其省略或在类中声明为CarCounter&amp; operator=(const CarCounter&amp; objToCopy) = default;,以明确该类使用默认分配逻辑。
  • 编译器应该如何知道如何打印CarCounter?如果您希望能够直接将&lt;&lt; 运算符与CarCounter 一起使用,则需要通过重载类的运算符来告诉编译器您希望如何打印对象。
  • 请给您的问题一个更具描述性的标题。几乎所有的问题都是关于如何解决问题的,所以这是没有用的。

标签: c++ c++11 c++14


【解决方案1】:

您的复制赋值运算符应如下所示:

CarCounter& CarCounter::operator=(const CarCounter& objToCopy) {
   carCount = objToCopy.carCount;
   return *this;
}

【讨论】:

    【解决方案2】:

    您不能将自定义类传递给cout。该错误基本上是说您的类CarCounter 与通过管道传输到cout 不兼容。这条线似乎完全不需要,可以删除。

    【讨论】:

    • 感谢您的澄清。我将另一个标记为答案,但这实际上解释了原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多