关于网友提出的“ 继承类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:
解决方案2:
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;
}
链接说重了是你这个.h被引用了2次以上,并且你把实现都写在.h里了。
如果你加 static 的话,这个函数就是 .h 被引用几次,程序里就会有几份,但是也不会报错就是了。
inline 不一定就会一定编译成内联,它只是告诉编译器首先尝试编译为inline,不行的话还是会弄一个函数出来的。
解决方案4: struct 和 class 的结尾}后面分号掉了。
另外你吧 operator== 写在外面就是全局的了,当然这也没什么问题就是了,只是不符合一般的设计逻辑。
1.
struct A{};
注意分号
class B 同样缺 分号
2.
你的两个 operator == 都没有实现啊 ....