修复上一个问题后(请参阅我提出的另一个问题)。我宣布了更多的课程。
其中一个称为CombatAdmin,它执行各种操作:(头文件)
#ifndef COMBATADMIN_H
#define COMBATADMIN_H
#include <string> // Need this line or it complains
#include <Player.h>
#include <Sound.h>
#include <Enemy.h>
#include <Narrator.h>
using namespace std;
class Enemy;
class Player;
class CombatAdmin // Code yet to be commented here, will come soon.
{
public:
CombatAdmin();
void healthSet(double newHealth, string playerName);
void comAdSay(string sayWhat);
void playerFindsChest(Player *player,Weapon *weapon,Armour *armour);
void youStoleOurStuffEncounter(Player *player);
void comAdWarning(string enemyName);
void comAdAtkNote(string attack, double damage,string target,string aggresor);
void entDefeated(string entName);
void comAdStateEntHp(string ent, double hp);
void comAdStateScanResults(string enemyName, double enemyHealth);
string doubleToString(double number);
string intToString(int number);
bool isRandEncounter();
void randomEncounter(Player *player,Sound *sound,Narrator *narrator);
bool combatRound(Player *player, Enemy *enemy, Sound *sound, bool ran);
void playerFindsItem(string playerName,string itemName,double itemWeight,double playerWeight);
void playerFindsGold(string playerName,double coinCnt,double playerCoinCnt);
};
#endif // COMBATADMIN_H
然后在main.cpp文件中实例化如下:( main.cpp文件的片段)
#include <iostream> // Required for input and output
#include <Item.h> // Item header file.
#include <Weapon.h> // Header files that I have made for my classes are needed for this program
#include <sstream> // Needed for proper type conversion functions
#include <windows.h> // for PlaySound() and other functions like sleep.
#include <time.h> // Needed to seed the rand() function.
#include <mmsystem.h> // Not sure about this one, possibly defunct in this program.
#include <stdio.h> // Needed for a similar kind of output as iostream for various functions error msgs.
#include <irrKlang.h> // The header file of the sound lib I am using in this program.
#include <Narrator.h> // The narrators's header file.
#include <Pibot.h> // Other header files of classes.
#include <Armour.h>
#include <Player.h>
#include <Weapon.h>
#include <CombatAdmin.h>
using namespace irrklang;
using namespace std;
// Forward referenced functions
void seedRandom(); // Seeds the random number so it will be random as apposed to pseudo random.
string getPlayerName(string temp); // Gets the player's new name.
int main(int argc, char* argv[])
{
// Variables and object pointers declared here.
CombatAdmin *comAd = new CombatAdmin(); // Handles combat.
Narrator *narrator = new Narrator(); // The Narrator that says stuff
Pibot *piebot = new Pibot(); // PIbot, the player's trusty companion
string temp; // Temp string for input and output
但是,当我尝试编译项目时,出现以下错误:
C:\Documents and Settings\James Moran.HOME-B288D626D8\My Documents\C++ projects\Test Project\main.cpp|59|undefined reference to `CombatAdmin::CombatAdmin()'|
我正在使用Code :: Blocks IDE(版本10.05)和GNU GCC编译器。该项目的类型为“控制台应用程序”。我使用的是Windows XP 32位SP3。
我尝试过更改搜索目录以包含目标文件的位置,但没有成功。
从代码中可以看出,叙述者和“PIbot”实例化得很好。 (然后使用,未显示)
因此,我的问题是,我需要做些什么来阻止这些错误的发生?就像我在使用库之前遇到类似的“Undefined reference to x”错误一样。我忘记了在Code :: Blocks中链接到它们,并且一旦我这样做,它们就会工作。
由于这个课程是我自己制作的,所以我对此并不十分肯定。
如果您需要有关代码等的更多信息,请说明。
答案 0 :(得分:19)
您已声明默认构造函数(CombatAdmin()),从而阻止编译器自动生成它。因此,您需要1)从类中删除默认构造函数的声明,或者2)提供实现。
答案 1 :(得分:2)
您确定要将标题包含在:
#include <CombatAdmin.h>
我认为您需要将头文件包含为:
#include "CombatAdmin.h"
对于您编写的其他标题也一样,如下所示:
#include "Armour.h"
#include "Player.h"
#include "Weapon.h"
//and similarly other header files written by you!
请参阅此主题:
What is the difference between #include <filename> and #include "filename"?
答案 2 :(得分:2)
我遇到了这种错误,原因是没有选择CombatAdmin.cpp文件作为构建目标文件:Prject-&gt; Properties-&gt; Build targets
答案 3 :(得分:0)
我的解决方案只是在类防御之前在标题中添加一行:
类CombatAdmin;