gpt4 book ai didi

c++ - 未实现的纯虚拟方法?

转载 作者:行者123 更新时间:2023-11-30 01:59:50 25 4
gpt4 key购买 nike

这是问题所在:我在尝试编译时不断收到未实现的纯虚方法错误。我已经在抽象基类中实现了所有纯虚方法。有什么想法吗?

这里是抽象基类:

class record{
public:
virtual int getID()=0;
virtual record *clone();
};

和实现:

class sdata: public record{
public:
sdata(std::string s = ""){data=s; ID=atoi(data.substr(0,8).c_str());}
virtual int getID(){return ID;}
private:
std::string data;
int ID;
};

抱歉,这是完整的错误信息:

“记录”中未实现的纯虚方法“getID”

也许是这段代码导致了错误:

int hashTable::hash(record *x) {
return floor(m * (x->getID() * A - floor(x->getID() * A)));
}

最佳答案

如果没有看到导致错误的代码,就很难确切知道发生了什么。如果这是一个编译时错误,我在这里看不到任何会导致它的东西。

但是,如果您看到运行时错误,我能想到的两个最常见的原因是:

(1) 从基类的构造函数或析构函数中调用成员函数(甚至是间接调用)。

(2) 派生类在未实现的情况下调用基类的函数版本。

显示这两种错误的示例是:

struct Base {
Base()
{
call_foo(); // Oops, indirectly calls Base::foo() (Scenario 1)
}
void call_foo() const {
foo();
}
protected:
virtual void foo() const = 0;
};<p></p>

<p>struct Derived : Base {
protected:
virtual void foo() const {
Base::foo(); // Oops, unimplemented virtual base function (Scenario 2)
}
};</p>

<p>int main() {
Derived().call_foo();
}
</p>

== 更新:可能的编译时错误 ==

我在您的示例代码中观察到 record 有一个返回 record * 的非纯虚拟 clone() 成员函数。由于记录是抽象的,您不能直接创建记录(只能创建其具体子类)。这表明您的 clone() 成员函数也应该是纯虚拟的;如果它尝试(例如)return new record(),您将收到一个错误,提示您的基类具有纯虚函数。

关于c++ - 未实现的纯虚拟方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15777056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com