[英]Linker error - undefined reference
我正在創建一個程序,但是運行它時出現以下錯誤:
/tmp/ccYLF4IM.o: In function `main':
maingame.cpp:(.text+0x13): undefined reference to `Human::Human()'
maingame.cpp:(.text+0x1f): undefined reference to `Orc::Orc()'
maingame.cpp:(.text+0x99): undefined reference to `Orc::~Orc()'
maingame.cpp:(.text+0xac): undefined reference to `Orc::~Orc()'
maingame.cpp:(.text+0xc5): undefined reference to `Human::~Human()'
maingame.cpp:(.text+0xdf): undefined reference to `Human::~Human()'
collect2: ld returned 1 exit status
我查看了我的代碼,我正在一起運行所有.cpp文件和.h文件。 我不確定是什么問題。 我知道與此有關的其他問題,但我似乎找不到所需的答案。 我檢查了所有內容的大小寫,甚至刪除了所有內容,然后再次開始以確保。 任何幫助,將不勝感激。 謝謝
//main.cpp
#include "Human.h"
#include "Orc.h"
using namespace std;
//Main.cpp
int main()
{
//Character cc;
Human H;
Orc O;
char choice;
char userC;
cout << "Welcome!\n";
cout << "" << endl;
cout << "Pick your choice:\n";
cout << "A -- Human\n";
cout << "B -- Orc\n";
cin >> choice;
return 0;
}
//Character.h
#ifndef CHARACTER_H
#define CHARACTER_H
#include <iostream>
#include <string>
using namespace std;
class Character
{
protected:
float characterTotal;
public:
virtual int createCharacter() = 0; //Pure virtual function
Character();
~Character();
};
#endif
//Character.cpp
#include "Character.h"
Character::Character()
{
//ctor
}
Character::~Character()
{
//dtor
}
//human.h
#ifndef HUMAN_H
#define HUMAN_H
#include "Character.h"
using namespace std;
class Human : public Character
{
private:
int characterStrength;
int characterDexterity;
int characterIntelligence;
string characterType;
int characterTotal;
public:
Human();//Constructor
~Human();
int getStrength ()
{
cout << "Enter a number from 0 to 18\n";
cin >> characterStrength;
return characterStrength;
}
int getDexterity ()
{
cout << "Enter a number from 0 to 18\n";
cin >> characterDexterity;
return characterDexterity;
}
int getIntelligence ()
{
cout << "Enter a number from 0 to 18\n";
cin >> characterIntelligence;
return characterIntelligence;
}
string getType ()
{
cout << "Please choose one of the following\n";
cout << "A -- Paladin \n";
cout << "B -- Ranger \n";
cout << "C -- Wizard \n";\
cin >> characterType;
return characterType;
}
virtual int createCharacter()
{
characterTotal = characterStrength + characterIntelligence + characterDexterity;
return characterTotal;
}
};
#endif
//Human.cpp
#include "Human.h"
Human::Human()
{
//ctor
}
Human::~Human()
{
//dtor
}
//orc.h
#ifndef ORC_H
#define ORC_H
#include "Character.h"
using namespace std;
class Orc : public Character
{
private:
int characterStrength;
int characterDexterity;
int characterIntelligence;
int chaD;
int chaI;
int chaS;
string characterClan;
int characterTotal;
public:
Orc(); //Constructor
~Orc();
int getStrength()
{
cout << "Enter a number between 0 to 18\n";
cin >> chaS;
characterStrength = chaS + 2;
return characterStrength;
}
int getDexterity()
{
cout << "Enter a number between 0 to 18\n";
cin >> chaD;
characterDexterity = chaD - 2;
return characterDexterity;
}
int getIntelligence()
{
cout << "Enter a number between 0 to 18\n";
cin >> chaI;
characterIntelligence = chaI - 2;
return characterIntelligence;
}
string getClan()
{
cout << "Please choose one of the following\n";
cout << "A -- Barbarian \n";
cout << "B -- Berserker \n";
cout << "C -- Vanguard \n";\
cin >> characterClan;
return characterClan;
}
virtual int createCharacter()
{
characterTotal = characterStrength + characterIntelligence + characterDexterity;
return characterTotal;
}
};
#endif
//Orc.cpp
#include "Orc.h"
Orc::Orc()
{
//ctor
}
Orc::~Orc()
{
//dtor
}
您需要編譯所有源文件(而不是頭文件)並將它們鏈接在一起。 在這一點上, 最直接的方法是只在一個命令中指定所有文件名:
g++ maingame.cpp character.cpp human.cpp orc.cpp
大型項目通常會分別編譯每個文件,然后鏈接生成的.o
(對象)文件,但是您似乎還沒有到此為止。
immibis提出了一點,但是我認為您應該花一些時間來研究makefile。 由於您似乎正在構建一個安靜的項目,因此每次手動編譯它都不舒服。 本教程是對makefile的很好的介紹。 從未停止學習!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.