gpt4 book ai didi

c++ - 未声明的标识符编译错误

转载 作者:行者123 更新时间:2023-11-30 00:39:20 28 4
gpt4 key购买 nike

我将自己投入到学习 C++ 的寒冷暴风雪中。我已经了解 Java,但 C++ 在某些方面似乎很奇怪。

事情是这样的:我有一个 A 类和一个 B 类。A 类本身有一个 B 类的实例。 B 类需要能够调用 A 类的一些方法,所以我在 B 类的构造函数中放置了一个指向 A 类的指针,并将其存储在一个变量中,这样我就可以用这个变量检索这些方法。

这是我的代码(简化):

A类.h

#ifndef CLASSA
#define CLASSA

#include "ParentClass.h"
#include "ClassB.h"

class ClassA : public ParentClass {

private:
ClassB *classB;

public:
ClassA(void);
virtual ~ClassA(void);

};
#endif

A类.cpp

   #include "ClassA.h"

//-----------------------------------------------------
ClassA::ClassA(void){
classB= new ClassB(this);
}
//-----------------------------------------------------
ClassA::~ClassA(void)
{
}
//-----------------------------------------------------

B类.h

#ifndef CLASSB
#define CLASSB

#include "ClassA.h"

class ClassB{

public:
ClassB(ClassA &pClassA){ classA = pClassA; };
ClassA *getClassAInstance(){ return classA; };

private:
ClassA *classA;
};
#endif

B类.cpp

#include "ClassA.h"

/*ClassB::ClassB(void){
classA= pClassA;
}*/

Visual Express 没有给出错误,但是当我编译时,它说 B 类无法识别什么是 A 类。这到底是怎么回事?

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(8): error C2061: syntax error : identifier 'ClassA'

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(10): error C2143: syntax error : missing ';' before '*'

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(10): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(10): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(10): warning C4183: 'getClassAInstance': missing return type; assumed to be a member function returning 'int'

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(13): error C2143: syntax error : missing ';' before '*'

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(8): error C2065: 'classA' : undeclared identifier

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(8): error C2065: 'pClassA' : undeclared identifier

1>c:\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\ClassB.h(10): error C2065: 'classA' : undeclared identifier

未声明什么?返回整数?

undeclared identifier

为什么?我包括了一切,对吧?伙计们,有什么想法吗?

最佳答案

这是因为您的头文件之间存在循环引用。您可以通过在另一个类的标题中前向声明其中一个类来打破它,如下所示:

#ifndef CLASSA
#define CLASSA

#include "ParentClass.h"
//#include "ClassB.h" <<<<< Circular reference is now broken

class ClassB; // Added a forward declaration for use below.

class ClassA : public ParentClass {

private:
ClassB *classB;

public:
ClassA(void);
virtual ~ClassA(void);

};
#endif

关于c++ - 未声明的标识符编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9000640/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com