在单独的文件中,枚举的类成员未定义

时间:2016-01-30 10:49:29

标签: c++ enums

好吧,我正在和一群学生一起使用Visual Studio 2015编写游戏。

我在文件DataTypes.h和DataTypes.cpp中定义了一个枚举类,但是当我尝试使用第三个文件AiFSM.cpp时,我收到了一个通用编译器错误:

“objectType没有成员'TYPE_ENEMY_SHIP'”

如果我使用枚举而不是枚举类,我会遇到同样的问题,除了错误抛出:

“标识符'TYPE_ENEMY_SHIP'未定义。”

但是,当我在AiFSM.cpp中包含枚举的定义时,代码会编译。这给了我的印象,我的包含是错误的来源,但我已经重新检查,然后重新输入它们(以防万一),但无济于事。

请问有人可以提出导致问题的原因吗?

DataTypes.h:

#pragma once
#ifndef DATATYPES_H  //Duel header guard to support other compilers
#define DATATYPES_H

enum class objectType;

DataTypes.cpp:

#include "stdafx.h"
#include "DataTypes.h"

enum class objectType {
    ...(Long list of enums omitted)
    //NOW we have NPC classes
    TYPE_ENEMY_SHIP,
    TYPE_ENEMY_STATION,
    ...
    TYPE_DESTROYED
};

AiFSM.h:

#pragma once
#ifndef AIFSM_H
#define AIFSM_H

#include "stdafx.h"
#include "DataTypes.h"

void enterFSM(objectType* type, FSMData* fsmData);

#endif

最后,AiFSM.cpp:

#include "stdafx.h"
#include "DataTypes.h"
#include "AiFSM.h"

//Passes the data onto the appropriate state
void enterFSM(objectType* type, FSMData* fsmData) {
    switch (*type) {
         case objectType::TYPE_ENEMY_SHIP:
           {break;} //TODO: Implement code
         ...(More case statements with identical errors.)

    }
}

1 个答案:

答案 0 :(得分:1)

您需要将完整的枚举类声明移动到DataTypes.h头文件。