这里是否存在循环依赖
Is there a cyclic dependency here?
下面我复制了一部分代码的简化版本,该代码在编译时出错。
测试.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
相关文章:
- C++GTKMM gui循环依赖关系
- 如何在头文件中声明类模板(由于循环依赖关系)
- 如何在具有循环依赖的类中dynamic_cast?
- C++模板方法中的循环依赖关系
- 修复循环依赖项 c++17 标头
- 涉及全局对象的循环依赖C++
- 循环依赖,在继承类的情况下使用覆盖方法
- Wt::D bo 中的循环依赖关系
- 在包含窗口标头时难以解决循环依赖关系问题
- 解决循环依赖关系 c++ 的想法
- C++循环依赖关系,未声明的标识符
- C++ 中的循环依赖关系问题
- 错误 C2512 视觉C++(并且不是循环依赖项)
- CMake 外部和内部静态库的循环依赖关系
- 正在从继承中解析循环依赖项
- "std::shared_ptr"循环依赖关系是如何导致问题的
- 循环包含依赖项/转发声明
- 纯引用而不是weak_ptr来打破循环依赖关系
- 如何在Visual Studio(C++11)中处理相互依赖/循环依赖
- 优化依赖循环openmp