编译器打嗝在C++和.o文件
Compiler Hiccup in C++ and with .o Files
>我一直在尝试编译一个多文件项目,但每次我尝试在播放器中使用 void .cpp时,我都会不断收到此错误消息,这似乎在编译期间创建的 player.o 具有相同的 void 定义 player_action(...(。当我尝试在其他文件中使用 void 时,它们对应的 .o 文件也会出现同样的问题。但是,如果我在任何文件中使用结构,则不会出现问题,也不会发生"多重定义"错误。下面的行是编译器给我的错误消息。
objDebugplayer.o: In function `Z13player_actioniii':
D:/Projects/Blackmail Mailman/player.cpp:13: multiple definition of `player_action(int, int, int)'
objDebugmain.o:D:/Projects/Blackmail Mailman/player.cpp:13: first defined here
这是我使用的播放器代码.cpp
:#include "include_files.cpp"
struct player_struct
{
int x;
int y;
int previous_x;
int previous_y;
int mode;
};
void player_action(int x, int y, int mode)
{
SDL_Event event;
if (SDL_PollEvent(&event))
{
if (event.type == SDL_KEYDOWN)
{
switch(event.key.keysym.sym)
{
case SDLK_RIGHT:;
};
};
};
};
可能出现什么问题,我该如何解决?我正在使用Mingw和Windows XP的代码块。我已经检查了其他文件,并且没有任何额外的 void player_action(( 定义。
您永远不会#include
.cpp文件,而只会 .h 文件。
如果您需要从程序的多个部分访问void player_action()
,则应创建一个包含以下内容的头文件myapi.h
:
//myapi.h
#ifndef MYAPI_HEADER
#define MYAPI_HEADER
void player_action(int x, int y, int mode);
/* more function declarations */
#endif
定义函数的文件将如下所示:
//player.cpp
#include "myapi.h"
void player_action(int x, int y, int mode)
{
/*...*/
}
使用它的文件将是这样的:
//main.cpp
#include "myapi.h"
void GameCycle()
{
/*...*/
player_action(0,0,0);
/*...*/
}
切勿在 #include 中包含对象定义,除非您知道自己在做什么。即使你知道,在这样做之前也应该三思而后行。始终使用包含防护装置(#ifndef...#define..#endif( - 这将防止多次包含标题。
这些是基本建议。我在B. Stroustrup的"C++编程语言"中看到过对这些东西的很好的解释。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到