【问题标题】:Overloading the ostream operator yields compile errors重载 ostream 运算符会产生编译错误
【发布时间】:2015-07-21 03:58:02
【问题描述】:

大家好,我有这个代码 -

typedef struct signal_declairation{

  //these are for 2001 type declairation
  bool is_array;
  int array_start, array_end;
  PORT_ATTRIBUTE port_attribute; //port direction
  string port_type;              //logic, UDT, wire, accept every thing

  //this is common to 2001 and normal
  string port_name;

  //dumper method
  friend ostream& operator<<(ostream &out, signal_declairation &m_signal_declairation);


} SIGNAL_DECLAIRATION;

std::ostream& operator<< (ostream &out, signal_declairation &m_signal_declairation)
{
  string port_direction;
  switch(m_signal_declairation.port_attribute){
  case INPUT: port_direction = "input";
    break;
  case OUTPUT: port_direction = "output";
    break;
  case INOUT: port_direction = "inout";
    break;
  }

  if(m_signal_declairation.is_array==true){

    out << " Port Name = " << m_signal_declairation.port_name 
    << " Port Direction = " << m_signal_declairation.port_attribute
    << " Port type = " << m_signal_declairation.port_type
    << " This is an arrayed port :: Array Start = " << m_signal_declairation.array_start 
    << " Array End = " << m_signal_declairation.array_end ;



    }else{

    out << " Port Name = " << m_signal_declairation.port_name 
    << " Port Direction = " << m_signal_declairation.port_attribute
    << " Port type = " << m_signal_declairation.port_type;

  }

  return out;
}

当我尝试编译时,我得到如下所示的错误 -

parser_globals.h: 在函数'std::ostream& 运算符

不知道为什么我不能将班级成员传递给

【问题讨论】:

    标签: c++ operator-overloading


    【解决方案1】:

    如果您提供了完整的错误消息,而不仅仅是一个小的 sn-p,事情会更容易。

    根据您目前提供的内容,您可能忘记包含标准流的必要标头,例如:

    #include <iostream>
    

    这将导致编译器找不到基类型或标准库中的类型的 operator&lt;&lt; 重载。

    【讨论】:

      【解决方案2】:

      改变你的重载定义:

      std::ostream& operator<< (ostream &out, signal_declairation &m_signal_declairation)
      

      std::ostream&amp; operator&lt;&lt; (ostream &amp;out,const signal_declairation &amp;m_signal_declairation) .

      不要忘记原型。

      【讨论】:

      • 我按照建议尝试了,仍然出现相同的错误...还有其他想法/建议吗??
      • 1.直接在你的结构/类中定义你的朋友重载函数,不要使用原型。
      • 第二个参数应该是const 用于常量正确性,但在这种情况下缺少const 不会导致他看到的错误。此外,重载定义正确,使其成为类成员而不是朋友不会修复错误。正如您在错误消息中看到的那样,编译器找到了重载,错误发生在他的重载中。
      【解决方案3】:

      编译器抱怨'const char [14]') out

      【讨论】:

      • Simon,问题是我忘了包含
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2014-04-24
      • 2019-06-27
      相关资源
      最近更新 更多