Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这里有循环依赖关系吗?_C++_Class_Vector_G++ - Fatal编程技术网

C++ 这里有循环依赖关系吗?

C++ 这里有循环依赖关系吗?,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!!!

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

测试.cpp

#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