这里是否存在循环依赖

Is there a cyclic dependency here?

本文关键字:依赖 循环 存在 是否 这里      更新时间:2023-10-16

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

测试.cpp

#include <iostream>
#include "../Beta.h"
#include "../Alpha.h"
using namespace std;
int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}

阿尔法

#include <vector>
class Alpha
{
    public:
        typedef struct _info{
            int  k;
        } info;
        friend class Beta;
};

贝塔·

   #include <vector>
    
        class Alpha;
        
        class Beta
        {
            public:
            std::vector <Alpha::info*> vecInfo;
        };

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

在测试中包含的文件中.cpp:10:0: ../Beta.h:8:15:错误:

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

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

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

错误:模板参数 2 无效

我可以从论坛线程中看到,第一个错误是由于某种循环依赖关系(错误:嵌套名称说明符中使用的不完整类型(。我无法看到我的代码和他们的代码之间的相似之处。我做错了什么。

这不是一个真正的循环依赖。 Beta.h只需要#include "Alpha.h"而不是向前声明class Alpha;

您需要

Beta.h中包含Alpha.h,因为需要完整的类定义才能访问Alpha::info。这不会创建循环依赖关系,因为Alpha.h不包括Beta.h

// don't forget the include guards!
#ifndef BETA_H_
#define BETA_H_
#include <vector>
#include "../Alpha.h"
class Beta
{
    public:
    std::vector <Alpha::info*> vecInfo;
};
#endif