我正在使用 DragonFireSDK 制作一个应用程序,我想用 .cpp 和 .h 文件组织我的多千行应用程序
虽然我在尝试做某事时遇到了很多错误
所以我的 app.cpp(主要的,必需的)看起来像这样
代码:
#include "DragonFireSDK.h"
#include "SaveData.h"
#include "Structures.h"
#include "Definitions.h"
#include "Variables.h"
#include "SaveData.h"
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "Functions.cpp"
#include "AppMain.cpp"
#include "AppExit.cpp"
#include "OnTimer.cpp"
#include "SaveData.h"到 #include "Variables.h" 都有类似的东西 代码:
#ifndef _HeaderName
#define _HeaderName
//STUFF HERE LIKE
#define player1 0
#define player2 1
//OR
typedef struct _number {
int view;
int number;
bool able;
int opacity;
};_number number[4];
//OR
int whoseturn;
int bet[5];
bool reachedmax[5];
int playerimg[5];
#endif
现在我可能已经做错了,但这里还有一些…… 我的 AppMain.cpp、OnTimer.cpp 等看起来像这样 (AppMain() 等也是必需的函数) 代码:
#include "DragonFireSDK.h"
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "Definitions.h"
#include "Structures.h"
#include "Variables.h"
#include "SaveData.h"
#include "Functions.cpp"
void AppMain() {
//STUFF HERE
};
现在我认为这是问题所在...... 函数.cpp 代码:
#include "DragonFireSDK.h"
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "SaveData.h"
#include "Structures.h"
#include "Definitions.h"
#include "Variables.h"
//SOME FUNCTIONS
void SavePlayerMoney();
void SetInfo (int idnum, bool actuallyset = false);
void SwitchButton (int idnum, bool makeactive=true);
void DisableButton (int idnum);
double round (double number);
void SavePlayerMoney() {
//...
}
void SetInfo(int idnum, bool actuallyset) {
//...
}
void SwitchButton(int idnum, bool makeactive) {
//...
}
void DisableButton(int idnum){
//...
}
现在我想如果修复了所有的东西之后我得到的错误...... 代码:
1>AppMain.obj : error LNK2005: "void __cdecl SwitchButton(int,bool)" (?SwitchButton@@YAXH_N@Z) already defined in App.obj
1>AppMain.obj : error LNK2005: "double __cdecl round(double)" (?round@@YANN@Z) already defined in App.obj
1>AppMain.obj : error LNK2005: "void __cdecl SetInfo(int,bool)" (?SetInfo@@YAXH_N@Z) already defined in App.obj
1>AppMain.obj : error LNK2005: "int __cdecl Digits(int)" (?Digits@@YAHH@Z) already defined in App.obj
非常感谢任何帮助!
最佳答案
不要#include
.cpp 文件。
C 编译模型是每个函数都定义 恰好一次,即恰好在一个编译单元(即一个目标文件)中。您将每个源文件独立编译成一个单独的目标文件(#include
-ing header 文件,以便编译器知道例如要使用的函数的原型(prototype))。然后,您将这些单独的目标文件链接在一起以形成最终的可执行文件。
如果您#include
.cpp 文件,您最终会在多个编译单元中定义相同的函数(记住#include
基本上等同于将内容复制粘贴到执行包含的文件中)。因此链接器会感到困惑,并为您提供您所看到的消息。
更新
哦,我看到问题是您没有Functions.cpp
的相应头文件。这个想法是,您还可以按照以下行编写 Functions.h
:
#ifndef FUNCTIONS_H_
#define FUNCTIONS_H_
void SavePlayerMoney();
void SetInfo(int idnum, bool actuallyset);
void SwitchButton(int idnum, bool makeactive);
void DisableButton(int idnum);
#endif
然后你#include
this 头文件,而不是 .cpp 文件。
关于c++ - 使用多个头文件和 cpp 文件帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5573964/