尝试启动队列以跟踪玩家的转弯

时间:2018-11-15 17:26:30

标签: c++ object queue

我正在尝试建立一个队列来跟踪玩家的转弯。队列中可能有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++;

}

1 个答案:

答案 0 :(得分:0)

发现我的问题...

  

我检查了.cpp文件,它们将其命名为.h文件,main.cpp则将其命名为其他.cpp文件

必须在主文件中包括.h文件,而不是.cpp文件。真的不太明白,因为我为自己创建的Queue模板类包括了.cpp而不是.h类。但是,此问题已解决,因此我没有涉及。谢谢大家。