这里有循环依赖吗?

use*_*107 1 c++ g++ class vector

下面我复制了我的部分代码的简化版本,在编译时会出错.

testing.cpp

#include <iostream>
#include "../Beta.h"
#include "../Alpha.h"

using namespace std;

int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Alpha.h

#include <vector>

class Alpha
{
    public:

        typedef struct _info{
            int  k;
        } info;

        friend class Beta;
};
Run Code Online (Sandbox Code Playgroud)

Beta.h

   #include <vector>

        class Alpha;

        class Beta
        {
            public:
            std::vector <Alpha::info*> vecInfo;
        };
Run Code Online (Sandbox Code Playgroud)

当我运行时,g++ testing.cpp我收到以下错误消息

在tests.cpp中包含的文件中:10:0:../ Bella.h:8:15:错误:

嵌套名称说明符中使用的不完整类型'Alpha'../Beta.h:8:15:

错误:嵌套名称说明符中使用的不完整类型"Alpha"

../Beta.h:8:27:错误:模板参数1无效../Beta.h:8:27:

错误:模板参数2无效

我可以从论坛帖子看到第一个错误是由于某种循环依赖(错误:嵌套名称说明符中使用的不完整类型).我无法看到我的代码和代码之间的相似性.我究竟做错了什么.

asc*_*ler 5

这实际上不是循环依赖. Beta.h只需要#include "Alpha.h"而不是前向声明class Alpha;.

  • 不,你可以声明一个之前从未被宣布的`friend`类.如果你想声明`class Beta;`那可能会让它更清晰一点,当然. (3认同)