继承类operator== 跟基类的,链接不过

来源:互联网  时间:2016/8/29 15:31:20

关于网友提出的“ 继承类operator== 跟基类的,链接不过”问题疑问,本网通过在网上对“ 继承类operator== 跟基类的,链接不过”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 继承类operator== 跟基类的,链接不过
描述:

struct A{}
bool operator==(const A& a, const A& b);
class B : public A
{
}
bool operator==(const B& a, const B& b);

链接不过
解决方案1:


 struct A{
 public:
 int v;
 bool operator==(const A& a){return (a.v == v);};
 friend bool operator==(const A& a, const A& b){return (a.v == b.v);};
 friend bool operator==(const A& a, int v){return (a.v == v);};
 };
 class B : public A
 {
 public:
 bool operator==(const B& a){return (a.v == v);};
 };
int _tmain(int argc, _TCHAR* argv[])
{
A a,b;
a.v = 1;
b.v = 2;
B c, d;
c.v = 10;
d.v = 20;
if (a == b) // 调用bool operator==(const A& a);  在没有时, 才调用 friend bool operator==(const A& a, const A& b);
{
cout << __LINE__;
}
if (c == d) // 调用 bool operator==(const B& a); 在没有时, 才调用 A的==
{
cout << __LINE__;
}
if (c == 10) // 调用friend bool operator==(const A& a, int v)
{
cout << __LINE__;
}
cout << __LINE__;
getchar();
return 0;
}
解决方案2:

链接说重了是你这个.h被引用了2次以上,并且你把实现都写在.h里了。
如果你加 static 的话,这个函数就是 .h 被引用几次,程序里就会有几份,但是也不会报错就是了。

解决方案3:

inline 不一定就会一定编译成内联,它只是告诉编译器首先尝试编译为inline,不行的话还是会弄一个函数出来的。

解决方案4:

struct 和 class 的结尾}后面分号掉了。
另外你吧 operator== 写在外面就是全局的了,当然这也没什么问题就是了,只是不符合一般的设计逻辑。

解决方案5:

1.
struct A{};
注意分号
class B 同样缺 分号
2.
你的两个 operator == 都没有实现啊 ....

上一篇wchar_t char string转换
下一篇关于链接时区分依赖库的版本
明星图片
相关文章
《 继承类operator== 跟基类的,链接不过》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)