C++:成员的行外声明必须是纯虚函数的定义错误

sc4hvdpw  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(184)

在头文件中,我声明了2个公共成员文件为纯虚函数,如下所示
头文件

class Whatever
{
public:
    virtual bool Update() = 0;
    virtual bool ShouldBeVisible() = 0;
};

执行情况

bool Whatever::Update();

bool Whatever::ShouldBeVisible();

但是当我试图编译时,我保留了一个错误,它说:成员的行外声明必须是 UpdateShouldBeVisible 的定义。当我去掉实现中的分号时,我得到一个不同的错误,显示expected ';顶级声明符之后的“”和成员的行外声明必须是 Update 的定义ShouldBeVisible 的函数声明符之后应为函数体。

yc0p9oo0

yc0p9oo01#

第二个文本块只是更多的声明:

bool Whatever::Update();

要有定义,就必须有某种实现:

bool Whatever::Update()
{
    return true; // or any other code
}

编辑:
我知道你想让它们成为纯虚函数,也就是说没有定义。纯虚函数就像是要求另一个类承诺实现/定义这些函数。你应该使用= 0,除非在另一个类中,否则不要再定义它们。
然后你就可以编写实现whatever接口的类了,以后你就可以使用你的Whatever,而不需要特别知道你有什么类型的whatever。

class IsAWhatever : public Whatever
{
public:
    virtual bool Update() override;
    virtual bool ShouldBeVisible() override;
};

bool IsAWhatever::Update()
{
    return true; // or any other code
}

使用示例:

int someFuncThatUsesWhatever(const Whatever& wut); // Defined elsewhere

int main()
{
    IsAWhatever lolwut;

    // This functions accepts a reference to any Whatever so it can
    // take our IsAWhatever class. This is "Runtime Polymorphism" if
    // you want to google it. It is useful for making writing code
    // that might become old and letting it call new code. 
    return someFuncThatUsesWhatever(lolwut);
}
wj8zmpe1

wj8zmpe12#

编译器希望头文件中有一个函数声明-class Class {void function ();},并且此函数的定义是编译器希望cpp文件中的void Class::function () { int x=2; }

相关问题