gpt4 book ai didi

c++ - ‘struct bb’ 类的前向声明

转载 作者:太空宇宙 更新时间:2023-11-04 15:46:01 26 4
gpt4 key购买 nike

在 stackoverflow 用户的帮助下,我几乎解决了我的代码问题,但现在遇到了不同的问题。我的代码现在看起来像这样:

#include <iostream>
#include <cmath>
#include <sstream>
using namespace std;

class root
{
public:
virtual ~root() {}

virtual root* addA(const root& a) const=0;
virtual root* addB(const root& b) const=0;
};

class bb;

class aa: public root
{
public:
aa() { }
aa(const aa& a) { }

root* addA(const root& a) const
{
return new aa();
}

root* addB(const root& b) const
{
return new bb();
}
};

class bb: public root
{
public:
bb() { }
bb(const bb& b) { }

root* addA(const root& a) const
{
return new aa();
}

root* addB(const root& b) const
{
return new bb();
}
};

int main(int argc, char **argv)
{
}

但是编译的时候报错:

/home/brain/Desktop/Temp/Untitled2.cpp||In member function ‘virtual root* aa::addB(const root&) const’:|
/home/brain/Desktop/Temp/Untitled2.cpp|30|error: invalid use of incomplete type ‘struct bb’|
/home/brain/Desktop/Temp/Untitled2.cpp|15|error: forward declaration of ‘struct bb’|
||=== Build finished: 2 errors, 0 warnings ===|

最佳答案

对于这种特定情况,您可以将成员函数的定义移动到类 bb 定义之后。或者最好将它们放在一个单独的 .cpp 文件中并包含标题。

class aa: public root
{
public:
// ....
root* addB(const root& b) const;
// Declaration only
};


class bb: public root
{
public:
// ....
};

// Here.
inline // <--- If you define it in the header.
root* aa::addB(const root& b) const
{
return new bb();
}

关于c++ - ‘struct bb’ 类的前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16458354/

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