28

为代码转储道歉:

游戏对象.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 ===|

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

4

8 回答 8

56

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

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

#include "gameObject.h"

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

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

ETC

于 2010-09-19T16:29:50.687 回答
10

cpp文件中的实现应该是形式

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

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

不在类 gameObject { } 定义块内

于 2010-09-19T16:30:31.427 回答
10

添加头文件

#pragma once
于 2016-01-19T09:34:48.863 回答
6

您应该像这样包装.h文件:

#ifndef Included_NameModel_H

#define Included_NameModel_H

// Existing code goes here

#endif
于 2016-05-10T17:47:42.213 回答
5

你定义同一个类两次就是为什么。

如果您的意图是实现 CPP 文件中的方法,请执行以下操作:

gameObject::gameObject()
{
    x = 0;
    y = 0;
}
gameObject::~gameObject()
{
    //
}
int gameObject::add()
{
        return x+y;
}
于 2010-09-19T16:31:52.000 回答
3

如果您在使用模板时遇到问题,或者您正在从另一个 .cpp 文件中调用该类

尝试在头文件中使用“#pragma once”。

于 2019-03-15T03:39:14.970 回答
0

包括一些#ifndef name #define name #endif 预处理器应该可以解决您的问题。问题是它从标题到函数然后返回到标题,因此它使用所有预处理器(#include)多次重新定义类。

于 2013-07-13T01:32:37.117 回答
-1

class gameObject.cpp文件和.h文件中定义。
那是创建一个重新定义错误。

您应该在一个地方定义类ONCE。(约定说定义在 中,所有实现都在 中).h.cpp

请帮助我们更好地理解,您对错误消息的哪一部分有问题?

错误的第一部分表示该类已在 中重新定义。gameObject.cpp
错误的第二部分表示先前的定义在gameObject.h.

信息能清晰多少?

于 2010-09-19T16:30:47.040 回答