【发布时间】:2021-07-02 12:39:53
【问题描述】:
我在覆盖基类 operator== 时遇到问题。这是代码。
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class IClient {
virtual const std::vector<T>& getID() = 0;
virtual bool isEqual(const std::vector<T>& anotherID) = 0;
virtual bool operator==(const IClient& anotherClient) = 0;
};
class SeviceClient : public IClient<int8_t> {
const std::vector<int8_t> ID;
public:
SeviceClient(const std::vector<int8_t>& ID) : ID(std::move(ID)) {}
SeviceClient(const std::vector<int8_t>&& ID) : ID(std::move(ID)) {}
const std::vector<int8_t>& getID() override {
return ID;
}
bool isEqual(const std::vector<int8_t>& anotherID) override {
return true;
}
bool operator==(const SeviceClient& anotherClient) override {
return true;
}
};
它抱怨
error: 'bool SeviceClient::operator==(const SeviceClient&)' marked 'override', but does not override
当我将函数转换为时,编译器看起来很高兴
bool operator==(const IClient<int8_t>& anotherClient) override {}
这是问题的解决方案还是我在这里遗漏了什么?
谢谢
【问题讨论】:
-
试试
bool operator==(const IClient& anotherClient) override。 -
嗨@MarekR 为什么你认为这是一个糟糕的设计? 1.我想拥有纯虚函数的接口类,以便将来模拟。 2. 其次,我有两个客户
SeviceClient : public IClient<int8_t>和class SubsciberClient : public IClient<uint8_t>。我也可以编写单个模板派生类,而不是像这样template<typename T> Clinet : public IClient<T>的两个类,但是选择编写两个不同的派生类。对设计有什么建议吗? -
@BhanuKiran 相等运算符通常是为具有结构特征的类定义的(没有多态性,没有回调,可以复制的东西)。我不知道您的实际问题的性质是什么,所以我只是猜测,因为这对我来说看起来不正确。
标签: c++ operator-overloading c++14