c++ - 在结构定义之前,C++ 类中的结构返回函数

标签 c++ class oop object struct

我有一个名为 SuperTree 的树结构类在我的 C++ 程序中,我希望它有一个返回 struct 的实例方法或pair其中哪一个属性是指向 SuperTree 的指针对象。

insert在我的SuperTree中起作用类应该返回 Res结构体,其中包含对另一个 SuperTree 的引用对象和一个 bool 值。但是,如果我尝试编译代码,则会收到以下错误消息:

supertree.cpp:24: error: ISO C++ forbids declaration of ‘Res’ with no type

我也无法定义 Res结构在我的 SuperTree 之前类,因为它也不会编译。也许这是 C++ 泛型类型或其他东西的情况(我还不知道如何使用)。

所以这是我的尝试:

#include <cstdio>
#include <utility>
using namespace std;

class AVL {
public:
    int key;
    int bf;
    AVL* leftChild;
    AVL* rightChild;

    AVL()
    {
    }

    ~AVL() {};

    AVL rotateLeft();
    AVL rotateRight();

    Res* insert(int value);

    int remove();
    int size();
};

// typedef pair<AVL, bool> result;

typedef struct result {
  struct AVL *avl;
  bool changed;
} Res;

请注意 pair定义已被注释掉,但你们也可以回答他们,我会很高兴!

就是这样,我怎样才能同时拥有 SuperTree类和Res结构体和 Res我的SuperTree中的指针返回函数类?

欢迎任何帮助。谢谢!

最佳答案

如果两个类或结构必须相互引用,则需要为其中一个或另一个添加前向声明,如下所示:

struct Res; // No typedef is necessary in C++
class AVL {
    ...
    Res* insert(int value);
};
struct Res {
    AVL *avl;
    bool changed;
};

请注意pair<AVL*,bool>代替 Res 也可以工作,让您跳过前向声明:

class AVL {
    ...
    std::pair<AVL*,bool> insert(int value);
};

关于c++ - 在结构定义之前,C++ 类中的结构返回函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376043/

相关文章:

c++ - 是否可以从 Linux 为 Windows XP 交叉编译 C++ 应用程序?

java - Windows 中 Java 应用程序和 C++ 应用程序之间的同步

c++ - 如何将字符串 vector 中的每个单词更改为大写

c++ - 在类之外声明 C++ 方法?

c++ - 为什么我会禁止在堆中分配?

java - 创建 Java 类

c++ - 我如何处理行为的组合?

java - 公共(public)接口(interface) ITMark<E extends Comparable<E>>

python自定义类运算符重载

python - 在多个文件和目录中使用Python OOP时,有助于理解分层继承