为什么我的参数不匹配

shiosank 2008-07-29 04:19:57
class Query
{

friend Query operator ~(const Query&);
friend Query operator |(const Query&,const Query&);
friend Query operator &(const Query&,const Query&);

public:

Query(const string&);

Query(const Query&c):q(c.q),use(c.use){++*use;}

~Query(){decr_use();}

Query& operator=(const Query&);

set<TextQuery::line_no>
eval(const TextQuery &t) const {return q->eval(t);}

ostream &display(ostream& os) const {return q->display(os);}

inline Query operator& (const Query & lhs, const Query & rhs)
{
return new AndQuery(lhs,rhs);
}
inline Query operator| (const Query & lhs,const Query & rhs)
{
return new OrQuery (lhs,rhs);
}
inline Query operator~ (const Query & oper)
{
return new NotQuery(oper);
}
inline ostream
operator<<(ostream &os,const Query &q)
{
return q.display(os);
}


private:
Query(Query_base *query):q(query),use(new size_t(1)){}
Query_base *q;
size_t *use;
void decr_use()
{
if(--*use==0)
delete q;
delete use;
}
};

C:\Program Files\Microsoft Visual Studio\MyProjects\query\Query_base.cpp(76) : error C2804: binary 'operator &' has too many parameters
C:\Program Files\Microsoft Visual Studio\MyProjects\query\Query_base.cpp(76) : error C2333: '&' : error in function declaration; skipping function body
C:\Program Files\Microsoft Visual Studio\MyProjects\query\Query_base.cpp(80) : error C2804: binary 'operator |' has too many parameters
C:\Program Files\Microsoft Visual Studio\MyProjects\query\Query_base.cpp(80) : error C2333: '|' : error in function declaration; skipping function body
C:\Program Files\Microsoft Visual Studio\MyProjects\query\Query_base.cpp(84) : error C2808: unary 'operator ~' has too many formal parameters
C:\Program Files\Microsoft Visual Studio\MyProjects\query\Query_base.cpp(84) : error C2333: '~' : error in function declaration; skipping function body
C:\Program Files\Microsoft Visual Studio\MyProjects\query\Query_base.cpp(89) : error C2804: binary 'operator <<' has too many parameters
C:\Program Files\Microsoft Visual Studio\MyProjects\query\Query_base.cpp(89) : error C2333: '<<' : error in function declaration; skipping function body
Error executing cl.exe.
...全文
208 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiosank 2008-07-29
  • 打赏
  • 举报
回复
inline Query operator& (const Query & lhs, const Query & rhs)
{
return new AndQuery(lhs,rhs);
}
inline Query operator ¦ (const Query & lhs,const Query & rhs)
{
return new OrQuery (lhs,rhs);
}
inline Query operator~ (const Query & oper)
{
return new NotQuery(oper);
}
这三个函数怎么改呢?我改了几下都没改对
wangdeqie 2008-07-29
  • 打赏
  • 举报
回复

//别定义成成员函数,单独定义这些函数,如下:
class Query
{
public:
ostream &display(ostream& os)const ;
};

ostream& operator <<(ostream &os,const Query &q)
{
return q.display(os);
}
11000000 2008-07-29
  • 打赏
  • 举报
回复

好好看看运算符重载方面的知识吧。
chenzhp 2008-07-29
  • 打赏
  • 举报
回复
你把这个重载函数声明为类的成员函数了,
inline Query operator ¦ (const Query & lhs,const Query & rhs)
当运算符重载函数声明为成员函数时,二元运算符只带一个参数.
lzr4304061988012 2008-07-29
  • 打赏
  • 举报
回复
inline Query operator& (const Query & lhs, const Query & rhs)
{
return new AndQuery(lhs,rhs);
}
inline Query operator ¦ (const Query & lhs,const Query & rhs)
{
return new OrQuery (lhs,rhs);
}
inline Query operator~ (const Query & oper)
{
return new NotQuery(oper);
}
inline ostream
operator < <(ostream &os,const Query &q)
{
return q.display(os);
}
把这些放到外面定义。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧