无法在C ++中重载输出流

时间:2012-01-29 02:38:58

标签: c++ operator-overloading overloading outputstream

我正在尝试重载<<我的班级STEntry中的运算符但仍然遇到此错误。我的班级被贴上了错误。

stentry.h: In function ‘std::ostream& operator<<(std::ostream&, const STEntry&)’:
stentry.h:48: error: no match for ‘operator<<’ in ‘std::operator<< [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](((std::basic_ostream<char, std::char_traits<char> >&)((std::basic_ostream<char, std::char_traits<char> >*)out)), ((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)(& temp->STEntry::lexeme))) << ','’
stentry.h:46: note: candidates are: std::ostream& operator<<(std::ostream&, const STEntry&)

我在STEntry.h上课。这很简单。我试图显示一些变量值。

#ifndef __STENTRY__
#define __STENTRY__
#include <string>

using namespace std;

class STEntry {
  public:
     string lexeme; // addr. of lexema associated with this entry
     int  tokenval; // token value for this entry
     int  offset;   // location of variable in block

     STEntry(string name = "", int newval = 0, int newoffset = 0);
     // function:  constructor ... initializes major fields

     // Relational operators:
    bool operator == (const STEntry &) const;
    bool operator != (const STEntry &) const;
    friend ostream & operator << (ostream &, const STEntry &);
};

//--- BEGIN IMPLEMENTATION

//constructor
STEntry::STEntry(string name, int newval, int newoffset)
{
    lexeme = name;
    tokenval = newval;
    offset = newoffset;
}

// ....

//Output a single STEntry to standard output
std::ostream& operator << (std::ostream& out, const STEntry & temp)
{
    out << temp.lexeme << ',' << temp.tokenval << ',' << temp.offset;
    return out;
}

//--- END OF IMPLEMENTATION
#endif

5 个答案:

答案 0 :(得分:2)

你超载operator<<就好了。这是导致问题的功能内部的一线。

out << temp.lexeme << ',' << temp.tokenval << ',' << temp.offset;

从错误消息中,它不知道如何将lexemestring)写入流中。

您是否同时包含<iostream><string>?我只在你发布的代码中看到其中一个。

答案 1 :(得分:2)

添加

#include <iostream>

到你的档案。

答案 2 :(得分:1)

你可能需要在标题之前包含iostream

答案 3 :(得分:1)

您可能没有在项目中包含任何流库。试试#include <iostream><ostream>

答案 4 :(得分:0)

你实际上必须实现运算符&lt;&lt;换句话说,你必须写它。

另请注意,宏名称上的__保留供编译器实现者使用,不应使用。