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

Dat*_*bot 17 c++ class redefinition

代码转储道歉:

gameObject.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;
    }
};
Run Code Online (Sandbox Code Playgroud)

gameObject.h:

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

    gameObject(int inx, int iny);
    ~gameObject();
    int add();
};
Run Code Online (Sandbox Code Playgroud)

错误:

||=== 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 ===|
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚出了什么问题.救命?

sel*_*tze 39

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

实际上,您不需要第二次定义类来实现这些功能.实现这样的功能:

#include "gameObject.h"

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

int gameObject::add()
{
    return x+y;
}
Run Code Online (Sandbox Code Playgroud)

等等


小智 9

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;
    }
Run Code Online (Sandbox Code Playgroud)

不在类gameObject {}定义块中


小智 8

添加头文件

#pragma once
Run Code Online (Sandbox Code Playgroud)

  • 这将实现什么? (3认同)
  • @IgorGanapolsky如果您需要``include```两个单独的文件,而这两个``include```同一个第三个文件,那么你的编译器会给你一个错误,因为它会尝试两次包含同一个文件,使用“#pragma Once”可以阻止编译器出现这样的行为,方法是不允许编译器两次“include”同一个文件,并两次使用一次包含的文件。 (2认同)

loc*_*cka 5

你定义同一个类两次就是原因。

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

gameObject::gameObject()
{
    x = 0;
    y = 0;
}
gameObject::~gameObject()
{
    //
}
int gameObject::add()
{
        return x+y;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

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

#ifndef Included_NameModel_H

#define Included_NameModel_H

// Existing code goes here

#endif
Run Code Online (Sandbox Code Playgroud)