【问题标题】:A case od the most vexing parse最令人头疼的解析案例
【发布时间】:2020-08-17 07:57:24
【问题描述】:

我的代码一直给我错误Invalid operands to binary expression ('std::__1::ostream' (aka 'basic_ostream<char>') and 'const bus') 这是最令人烦恼的解析案例吗?如果是这样如何解决它。我正在尝试打印存储在向量中的对象。 std::vector<bus> v = {} 是包含对象的向量,而 bus 是我的类

#include <iostream>
#include <vector>

class bus{
public:
int carNum, releaseYear;
};
int temp1, temp2;
void print(std::vector<bus> const &input)
{
for (auto it = input.cbegin(); it != input.cend(); it++)
{
    std::cout << *it << ' '<< std::endl;
}
}

int main()
{
bus bus1;
bus1.carNum = 0;
bus1.releaseYear = 0;

bus bus2;
bus2.carNum = 0;
bus2.releaseYear = 0;

// Create a vector containing objects
std::vector<bus> v = {};

// Add two more integers to vector
std::cout<<"enter number"<<std::endl;
std::cin>>temp1;
temp1 = bus1.carNum;
std::cout<<"enter year"<<std::endl;
std::cin>>temp2;
temp2 = bus1.releaseYear;



v.push_back(bus1);

print(v)

}

【问题讨论】:

  • 不,这不是最麻烦的解析。
  • 这里没有令人烦恼的解析。 bus 没有operator&lt;&lt;,仅此而已。添加它,你会没事的。
  • @cigien 你能用 sn-p 输入它应该在哪里吗?我不太明白
  • 您希望std::cout &lt;&lt; *it 做什么?为什么会这样?

标签: c++ vector most-vexing-parse


【解决方案1】:

这里没有令人烦恼的解析。您只需为bus 类型重载流插入运算符。由于bus只有公共数据成员,这可以是一个非好友函数:

std::ostream& operator<<(std::ostream& stream, bus const& b)
{
  stream << "#" << b.carNum << " Year" << b.releaseYear;  
  return stream;
}

您当然可以根据需要设置输出格式。

【讨论】:

    猜你喜欢
    • 2013-06-08
    • 1970-01-01
    • 2018-05-26
    • 2019-11-30
    • 2013-08-02
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多