我正在尝试建立一个队列来跟踪玩家的转弯。队列中可能有8个玩家,因此队列中应该有8个玩家对象。我不断收到的错误是LNK2005 "public:_thiscall Player::Player(void)" (??0Player@@QAE@XZ) already defined in Main.obj
,还有LNK1169 one or more multiply defined symbols found
。我在网上找到的唯一答案是尝试使我的吸气剂内联,但这并没有真正的帮助。我还尝试了制作4个不同的Player对象而没有循环并分别添加它们,但这也没有解决任何问题。最初,Player类是模板类,但是我更改了它,因为我认为它不必是一个类,而当它出现时,我会遇到另一个错误。希望有人可以对我的所作所为给予警告。队列是一个模板,但是因为我希望能够在队列中存储任何内容。所以,首先我初始化了一个队列。
//initialize players turn in queue
Queue<Player> playerQueue(NUM_PLAYERS);
//track players added
int playerNum = 1;
//keep looping until we reached
//the number of players
while (playerNum <= NUM_PLAYERS) {
//create new object
Player newPlayer;
//add to queue
playerQueue.add(newPlayer);
//increment player count
playerNum++;
}
此刻我的玩家班级非常简单。由于当前将吸气剂插入头文件中,因此将其注释掉。读到这样做可以解决我的问题。没有。
#include <iostream>
#include "player.h"
#include "queue.h"
using namespace std;
Player::Player() {
pName = "Outis";
queuePos = 0;
propSize = 0;
currency = 0;
}
//Getters
/*int Player::getCurrency() {
return currency;
}
int Player::getQueuePos() {
return queuePos;
}*/
这是我的头文件
class Player {
public:
Player();
//Getters
inline int getCurrency() { return currency; }
inline int getQueuePos() { return queuePos; }
//vector<Properties> getProperties();
private:
//players name
std::string pName;
//when it is their turn
int queuePos;
//size of property vector
int propSize;
//vector to store properties
//vector<Properties> propList;
//amount of currency
int currency;
};
这是我的Queue模板类中的add函数
// Add value to rear
template<class T>
void Queue<T>::add(const T &val)
{
if (numStored == capacity)
{
cerr << "Queue full: cannot add element" << endl;
return;
}
// add to rear
int rearIndex = (frontIndex + numStored) % capacity;
elements[rearIndex] = val;
numStored++;
}
答案 0 :(得分:0)
发现我的问题...
我检查了.cpp文件,它们将其命名为.h文件,main.cpp则将其命名为其他.cpp文件
必须在主文件中包括.h文件,而不是.cpp文件。真的不太明白,因为我为自己创建的Queue模板类包括了.cpp而不是.h类。但是,此问题已解决,因此我没有涉及。谢谢大家。