Попытка начать очередь для отслеживания игроков хода - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь запустить очередь для отслеживания хода игроков. В очереди может быть 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 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 голосов
/ 16 ноября 2018

Нашел мою проблему ...

Я проверил свои файлы .cpp, они называют свои файлы .h, main.cpp вызывает другие файлы .cpp

должен был включать файлы .h в main, а не .cpp. Не совсем понимаю, потому что я включаю .cpp для класса шаблонов Queue, который я создал, вместо класса .h. Однако проблема исправлена, поэтому я не касаюсь ее. Спасибо всем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...