C 包括文件会导致未知错误

C++ Including a file causes unidentified errors

本文关键字:未知 错误 包括 文件      更新时间:2023-10-16

我有两个类别引起问题 - 类" A"answers" B"类。A类必须能够存储B类的对象,但是B类中的功能必须在A类A的参数中接受。

我拥有的代码。

a类:

#ifndef INC_A
#define INC_A
#include "ClassB.h"
class ClassA
{
private:
    ClassB* b;
public:
    void Foo()
    {
        b = new ClassB;
        b->Foo2(this);
    }
}
#endif

B类:

#ifndef INC_B
#define INC_B
#include "ClassA.h"
class ClassB
{
public:
    void Foo2(ClassA* a)
    {
        // Do stuff with "a" here
    }
}
#endif

我遇到的错误如下:

'ClassB::Foo2': function does not take 1 arguments

syntax error: identifier 'ClassA'

有没有办法解决这个看似无限的循环?

最简单的情况:

#ifndef INC_A_AND_B
#define INC_A_AND_B
class ClassB; // forward declaration for B
class ClassA
{
private:
    ClassB* b; // usage of B
public:
    void Foo()
    {
        b = new ClassB;
        b->Foo2(this);
    }
};
// actual definition for B
class ClassB
{
public:
    void Foo2(ClassA* a)
    {
        // Do stuff with "a" here
    }
};
#endif

在更复杂的场景中,可能值得提取抽象接口,然后将两个类作为后代。

是的,您需要将类分开为标题和实现文件(.h and .cpp(,然后使用正向定义。例如:

classa.h:

#ifndef INC_A
#define INC_A
class ClassB;
class ClassA
{
private:
    ClassB* b;
public:
    void Foo();
}
#endif    

classa.cpp:

#include "ClassA.h"
void ClassA::Foo() {
        b = new ClassB;
        b->Foo2(this);
}

尝试在类定义的末尾添加半隆。例如:

class ClassB
{
public:
    void Foo2(ClassA* a)
    {
        // Do stuff with "a" here
    }
}; // <- semicolon