运算符重载时出错(错误:'运算符&lt;&lt;'不匹配(操作数类型为'std :: basic_ostream <char>'和'const char [2]')

时间:2017-02-11 12:04:06

标签: c++ qt

#ifndef NAME_H
#define NAME_H
#include <string>                                // For string class

class Name
{
private:
 std::string first{};
 std::string second{};

public:
  Name(const std::string& name1, const std::string& name2) : first(name1), second(name2){}
  Name()=default;
  std::string get_first() const {return first;}
  std::string get_second() const { return second; }

  friend std::istream& operator>>(std::istream& in, Name& name);
  friend std::ostream& operator<<(std::ostream& out, const Name& name);
};

// Stream input for Name objects
inline std::istream& operator>>(std::istream& in, Name& name)
{
  return in >> name.first >> name.second;
}

// Stream output for Name objects
inline std::ostream& operator<<(std::ostream& out,  const Name& name)
{  
   //My error is here while I am adding  " " in the overload
   return out << name.first << " " << name.second;
}

//我想重载&lt;&lt; std :: ostream的运算符,它将Name对象作为我的右手参数 //现在当我在重载中添加“”时,它会向我显示错误

//错误如下:  错误:'operator&lt;&lt;'不匹配(操作数类型为'std :: basic_ostream'和'const char [2]')    退出&lt;&lt; name.first&lt;&lt; “”&lt;&lt; name.second;                             ^

1 个答案:

答案 0 :(得分:2)

感谢您上传所有详细信息 - 问题现在是可以回答的。

编译器无法访问您提供的重载,因为istream和istream在编译时不是完整类型。

你需要写

#include <iostream>

纠正这一点。有时编译器诊断是迟钝的。