Chinaunix

标题: 关于const的一个问题,编译错误 [打印本页]

作者: jeanlove    时间: 2009-02-20 12:23
标题: 关于const的一个问题,编译错误
一个小程序,一个类的内部定义了operator==比较运算符
> cat t.cpp
struct a{
       int x;
       bool operator==(const a& ia){return x==ia.x;}
};
bool f(const a& ia, const a& ib){
     return ia==ib;
}
int main(int argc, char *argv[])
{
    return 0;
}

在solaris8(gcc2.95),devcpp4992, linux gcc 4.1.2下面编译都得到下面这样的错误:
> gcc t.cpp
t.cpp: In function `bool f(const a &, const a &':
t.cpp:6: passing `const a' as `this' argument of `bool a:perator ==(const a &' discards qualifiers

为什么说丢失了类型限定? 我分明都加了const 关键字啊!

谢谢!
作者: drowsyboy    时间: 2009-02-20 12:23
标题: 回复 #1 jeanlove 的帖子
you have two choices:

struct a{
        int x;
        bool operator==(const a& ia) const {return x==ia.x;}
};
bool f(const a& ia, const a& ib){
        return ia==ib;
}
int main(int argc, char *argv[])
{
        return 0;
}


or just do like

struct a{
        int x;
        bool operator==(const a& ia) {return x==ia.x;}
};
bool f(a& ia, const a& ib){
        return ia==ib;
}
int main(int argc, char *argv[])
{
        return 0;
}


And the first is better
作者: zhuhefang2006    时间: 2009-02-20 12:35
一堆笑脸,看起来乱乱的
作者: alexhappy    时间: 2009-02-20 12:46
原帖由 jeanlove 于 2009-2-20 12:23 发表
一个小程序,一个类的内部定义了operator==比较运算符
> cat t.cpp
struct a{
       int x;
       bool operator==(const a& ia){return x==ia.x;}
};
bool f(const a& ia, const a& ib){
     return ...

你没定义错,而是用错了
去掉f()函数的两个const
作者: wmytch    时间: 2009-02-20 12:52
这个应该这样
struct a{
       int x;
       bool operator==(const a& ia) const {return x==ia.x;}
};
bool f(const a& ia, const a& ib) {
     return ia==ib;
}
int main(int argc, char *argv[])
{
    return 0;
}
或者这样:struct a{
       int x;
       bool operator==(const a& ia) {return x==ia.x;}
};
bool f(a& ia, const a& ib) {
     return ia==ib;
}
int main(int argc, char *argv[])
{
    return 0;
}
作者: jeanlove    时间: 2009-02-20 16:14
原帖由 drowsyboy 于 2009-2-20 12:47 发表
you have two choices:

struct a{
        int x;
        bool operator==(const a& ia) const {return x==ia.x;}
};
bool f(const a& ia, const a& ib){
        return ia==ib;
}
int main(int ar ...

谢谢,问题解决,给分!
作者: zliming    时间: 2009-02-20 16:39
来晚了,没分了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2