为什么我会重新定义类错误?

新手上路,请多包涵

为代码转储道歉:

游戏对象.cpp:

 #include "gameObject.h"
class gameObject
{
    private:
    int x;
    int y;
    public:
    gameObject()
    {
    x = 0;
    y = 0;
    }

    gameObject(int inx, int iny)
    {
        x = inx;
        y = iny;
    }

    ~gameObject()
    {
    //
    }
    int add()
    {
        return x+y;
    }
};

游戏对象.h:

 class gameObject
{
    private:
    int x;
    int y;
    public:
    gameObject();

    gameObject(int inx, int iny);
    ~gameObject();
    int add();
};

错误:

 ||=== terrac, Debug ===|
C:\terrac\gameObject.cpp|4|error: redefinition of `class gameObject'|
C:\terrac\gameObject.h|3|error: previous definition of `class gameObject'|
||=== Build finished: 2 errors, 0 warnings ===|

我不知道出了什么问题。帮助?

原文由 Dataflashsabot 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 731
2 个回答

您在头文件中定义类,将头文件包含到 *.cpp 文件中并再次定义该类,因为第一个定义被头文件拖入翻译单元。但是每个翻译单元只允许一个 gameObject 类定义。

您实际上不需要第二次定义该类来实现这些功能。实现如下功能:

 #include "gameObject.h"

gameObject::gameObject(int inx, int iny)
{
    x = inx;
    y = iny;
}

int gameObject::add()
{
    return x+y;
}

ETC

原文由 sellibitze 发布,翻译遵循 CC BY-SA 2.5 许可协议

尝试在文件顶部添加 #pragma once 或旧方式…将其放在代码顶部

#ifndef GAME_H //ensuring that this object is only initialized once
#define GAME_H

这在最后一行下面

#endif

这将确保类的一次初始化

原文由 A P 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题