C++ C++;在两个头文件中包含一个类
我必须为大学完成一个项目,但我不知道如何才能完成 问题是我想在GameHandler类中分配一个条件对象(不是指针),如下面的示例所示,但我不能这样做,因为我想到了Engine类中包含的Condition.h。所以我不能两次包含条件类。我是莱特吗 我该怎么做才能得到一个类似于我的错误示例的解决方案 非常感谢你 条件。h:C++ C++;在两个头文件中包含一个类,c++,header,include,forward,C++,Header,Include,Forward,我必须为大学完成一个项目,但我不知道如何才能完成 问题是我想在GameHandler类中分配一个条件对象(不是指针),如下面的示例所示,但我不能这样做,因为我想到了Engine类中包含的Condition.h。所以我不能两次包含条件类。我是莱特吗 我该怎么做才能得到一个类似于我的错误示例的解决方案 非常感谢你 条件。h: #ifndef CONDITION_h #define CONDITION_h class Condition { enum Rank {FIRST, SECOND, T
#ifndef CONDITION_h
#define CONDITION_h
class Condition
{
enum Rank {FIRST, SECOND, THIRD};
void doSomething();
};
#endif
发动机.h
#ifndef ENGINE_h
#define ENGINE_h
#include "Condition.h"
class Engine
{
Condition::Rank getter();
};
#endif
#ifndef GAMEHANDLER_h
#define GAMEHANDLER_h
#include "Condition.h"
class GameHandler
{
Condition condition_;
condition_.doSomething();
}
#endif
但是现在我有了第三个类,它应该是这样的,我想创建一个条件对象(不是指针)。如何做到这一点
GameHandler.h
#ifndef ENGINE_h
#define ENGINE_h
#include "Condition.h"
class Engine
{
Condition::Rank getter();
};
#endif
#ifndef GAMEHANDLER_h
#define GAMEHANDLER_h
#include "Condition.h"
class GameHandler
{
Condition condition_;
condition_.doSomething();
}
#endif
使用:
#ifndef GAMEHANDLER_h
#define GAMEHANDLER_h
/.../
#endif
将防止多个包含,所以默认情况下,如果您的页眉包含了
,C++中的类成员是私有的(更多关于访问说明符),这并不重要。尝试将它们声明为公共的class Condition
{
public:
enum Rank {FIRST, SECOND, THIRD};
void doSomething();
};
此外,您不能在类的声明中调用方法!您必须在方法(例如,构造函数)中执行此操作,但where将取决于您希望执行的操作
class GameHandler
{
Condition condition_;
public:
GameHandler() {
condition_.doSomething();
}
}
你试过编译它吗?在我看来没问题。你不能做
condition.doSomething()好的,但是我如何解决我的问题,因为当我像在我的示例中那样做时,我从编译器中得到一个错误:架构x86_64的未定义符号:“条件::条件()”,引用自GameHandler.o ld:symbol中的:GameHandler::GameHandler()找不到架构x86_64的clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)make:**[basic]错误1使用其中定义的类时,您可能忘记包含此标头或其他标头。检查你的所有文件,看看他们需要的类是否包括在内。@TheoG你在条件中声明了一个默认构造函数,但你从未定义过它。(你发布的代码有其他错误,但不是那个。)@molbdnilo你是莱特!我刚刚修复了我的程序,正如您所说,我没有在Condition类中声明默认构造函数!我现在试过了,但它也有同样的问题。当我尝试在GameHandler中创建“条件”而不尝试“条件”。doSomething()时,问题就出现了。如果没有编译器的错误,我无法创建Condition对象。请检查更新后的答案,我丢失了一个错误。谢谢你们的帮助!我修复了我的问题,它与@molbdnilo所说的一模一样!很高兴帮助你们!