C++ 这里有循环依赖关系吗?
下面我复制了一部分代码的简化版本,在编译时会出现错误 测试.cppC++ 这里有循环依赖关系吗?,c++,class,vector,g++,C++,Class,Vector,G++,下面我复制了一部分代码的简化版本,在编译时会出现错误 测试.cpp #include <iostream> #include "../Beta.h" #include "../Alpha.h" using namespace std; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
#include <iostream>
#include "../Beta.h"
#include "../Alpha.h"
using namespace std;
int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
#包括
#包括“./Beta.h”
#包括“./Alpha.h”
使用名称空间std;
int main(){
cout这不是真正的循环依赖。Beta.h
只需要包含“Alpha.h”
而不是向前声明类Alpha;
这不是真正的循环依赖。Beta.h
只需要包含“Alpha.h”您需要在Beta.h
中包含Alpha.h
,而不是向前声明class Alpha;
,因为需要完整的类定义才能访问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
//别忘了包括警卫!
#ifndef BETA_H_
#定义BETA_H_
#包括
#包括“./Alpha.h”
贝塔级
{
公众:
向量向量信息;
};
#恩迪夫
您需要在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
//别忘了包括警卫!
#ifndef BETA_H_
#定义BETA_H_
#包括
#包括“./Alpha.h”
贝塔级
{
公众:
向量向量信息;
};
#恩迪夫
这不是循环依赖项。它只是意味着你不能引用Alpha::info*
,因为它以前没有在任何地方声明过。这不是循环依赖项。它只是意味着你不能引用Alpha::info*
,因为它以前没有在任何地方声明过。但是Alpha.h必须向前声明Bet一个
所以你可以让它成为Alpha
的朋友,不?不,你可以声明一个以前从未声明过的朋友
类。如果你想声明class Beta;
,这可能会让它更清楚一点,当然。谢谢,但当我用include Alpha.hclass Alpha;
时,会出现不同的错误ode>在测试中包含的文件中。cpp:11:0:../Alpha.h:3:7:错误:重新定义'class Alpha'../Alpha.h:3:7:错误:以前定义的'class Alpha'
听起来好像缺少包含保护。@user13107您可能缺少包含保护。请参阅我的答案。但是Alpha.h必须向前声明Beta
所以你可以让它成为Alpha
的朋友,不是吗?不,你可以声明一个以前从未声明过的朋友类。如果你想声明class Beta;
,那可能会更清楚一点,当然。谢谢,但是当我用替换class Alpha;
时,会出现不同的错误a、 h
在测试中包含的文件中。cpp:11:0:../Alpha.h:3:7:错误:重新定义'class Alpha'../Alpha.h:3:7:错误:以前定义的'class Alpha'
听起来好像您缺少了include-guard。@user13107您可能缺少include-guard。请查看我的答案。您能告诉我m中的错误吗最初是y代码?当我写类Alpha
时,为什么它不明白?我从哪里可以了解更多关于这个特定问题的信息?我不知道这个问题的技术术语。@user13107转发声明只是说“有一个类名为Alpha或其他什么,我们对它一无所知”。当你说“Alpha::info”之类的话时在您的代码中,该代码需要访问Alpha
类的完整定义。否则它无法了解Alpha::info
。您能告诉我最初代码中的错误吗?为什么在我编写class Alpha
时它不理解?我在哪里可以了解更多关于这个特定问题的信息?我不知道下面是它的技术术语。@user13107转发声明只是说“有一个类的名称是Alpha或其他什么,我们对此一无所知”。当你说“Alpha::info”之类的话时在您的代码中,该代码需要访问Alpha
类的完整定义。否则,它无法了解Alpha::info
。
// 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