代码转储道歉:
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;
}
};
gameObject.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 ===|
我无法弄清楚出了什么问题。帮助
答案 0 :(得分:37)
您正在头文件中定义类,将头文件包含到* .cpp文件中并再次定义该类,因为第一个定义被头文件拖入转换单元。但每个翻译单元只允许一个gameObject类定义。
实际上,您不需要第二次定义类来实现这些功能。实现这样的功能:
#include "gameObject.h"
gameObject::gameObject(int inx, int iny)
{
x = inx;
y = iny;
}
int gameObject::add()
{
return x+y;
}
等
答案 1 :(得分: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;
}
不在 class gameObject { } 定义块
答案 2 :(得分:3)
你两次定义同一个班级是为什么。
如果您的目的是实现CPP文件中的方法,那么请执行以下操作:
gameObject::gameObject()
{
x = 0;
y = 0;
}
gameObject::~gameObject()
{
//
}
int gameObject::add()
{
return x+y;
}
答案 3 :(得分:1)
添加头文件
#pragma once
答案 4 :(得分:1)
你应该像这样包装.h
文件:
#ifndef Included_NameModel_H
#define Included_NameModel_H
// Existing code goes here
#endif
答案 5 :(得分:0)
您可以在class gameObject
文件和.cpp
文件中定义.h
。
这就是造成重新定义错误。
您应该在 ONE 位置定义班级 ONCE 。
(约定说定义在.h
,所有实现都在.cpp
)
请帮助我们更好地了解,您遇到问题的错误信息的哪一部分?
错误的第一部分表示该类已在gameObject.cpp
中重新定义
错误的第二部分表示先前的定义位于gameObject.h
。
这条消息有多清楚?
答案 6 :(得分:0)
包含一些#ifndef名称#define名称#endif预处理器,可以解决您的问题。 问题是它从头部到函数然后再返回到头部,因此它多次使用所有预处理器(#include)重新定义类。
答案 7 :(得分:0)
如果您在模板方面遇到问题,或者正在从另一个.cpp文件调用该类
尝试在头文件中使用“ #pragma一次”。