我正在尝试重载<<我的班级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
答案 0 :(得分:2)
你超载operator<<
就好了。这是导致问题的功能内部的一线。
out << temp.lexeme << ',' << temp.tokenval << ',' << temp.offset;
从错误消息中,它不知道如何将lexeme
(string
)写入流中。
您是否同时包含<iostream>
和<string>
?我只在你发布的代码中看到其中一个。
答案 1 :(得分:2)
添加
#include <iostream>
到你的档案。
答案 2 :(得分:1)
你可能需要在标题之前包含iostream
答案 3 :(得分:1)
您可能没有在项目中包含任何流库。试试#include <iostream>
或<ostream>
答案 4 :(得分:0)
你实际上必须实现运算符&lt;&lt;换句话说,你必须写它。
另请注意,宏名称上的__保留供编译器实现者使用,不应使用。