2013-06-10 4 views
2

программисты-программисты! Я ищу, чтобы войти в разработку игры, поэтому я пытаюсь написать свой собственный, очень простой текстовый боевой симулятор. Вы можете выбрать имя игрока и сразиться с монстрами по вашему выбору. Во всяком случае, я собираюсь сначала написать простой код, а затем расширить и добавить еще несколько классов. Вот два моих только файлы на данный момент:Ошибка: неопределенная ссылка на 'player()'

player.h

#ifndef PLAYER_H 
#define PLAYER_H 

#include <string> 
using std::string; 


class player 
{ 
public: 
player(); 

const int maxHealth = 100; 
int armorModifier = 0; 
int playerLevel = 1; 
int gold = 0; 
int currentHealth = maxHealth; 

string Name; 

~player(); 
}; 
#endif // PLAYER_H 

BattlesMain.cpp

/* GAME FEATURES THAT ARE COMMENTED WILL BE IMPLEMENTED AT A LATER TIME */ 


#include <iostream> 
#include "player.h" 

using std::cout; 
using std::cin; 

int main() 
{ 
    /* MAIN MENU */ 

cout << "Monster Battles: Text Action, v0.1\n"; 
cout << "Welcome, fighter!\n"; 
cout << "1.New Game\n"; 
// cout << "2.Load Game\n"; 
cout << "3.Quit Game\n"; 

char choice; 

cin >> choice; 

/* GAME LOOP */ 

while (choice !='4') 
{ 
    if (choice == '1') 
    { 
     player Player1; 

     cout << "Arena Host: Hello, fighter. What is your name?\n"; 
     cin >> Player1.Name; 
     cout << "Welcome to the arena, " << Player1.Name << ". Here, you will \n"; 
     cout << "be given the chance to battle fearsome monsters for fortune and \n"; 
     cout << "fame. With the gold you win, you can visit our shop to buy new weapons, \n"; 
     cout << "armor and other useful items. Since you are unarmed, here's a THIEF'S DAGGER. \n"; 
     cout << "It's not much, but you'll hopefully be able to buy better items later! Good luck!\n"; 


} 

return 0;} 

Обратите внимание, что это моя первая попытка создать даже небольшой проект , так что несите меня за любой плохой стиль кодирования (обратная связь более чем приветствуется). Это урезанная версия того, что я хочу сделать, как я также заявляю в комментариях. Дело в том, что когда я пытаюсь выполнить файл, везде, где я использую Player1.Name, я получаю сообщение об ошибке «Ошибка: неопределенная ссылка на« player() ». В настоящее время я использую Code :: Blocks для Windows 7.

Спасибо!

ответ

3

Вы не предоставили определения для конструкторы и деструктора вашего (у вас есть только декларацию в определении player класса).

Если конструктор и деструктор не должны ничего делать, просто не объявляйте их явно. Компилятор будет неявно генерировать их для вас.

В частности, деструктор, предоставляемый пользователем, имеет (скорее всего, нежелательный, я бы сказал) следствием запрета неявной генерации конструктора перемещения и оператора присваивания перемещения (где имплицитная генерация конструктора копирования и назначения копии оператор только устарел в C++ 11).

Кроме того, способ инициализации переменных разрешен только с C++ 11. В случае, если вам интересно, как переменные-члены будут инициализированы в C++ 03, что будет сделано с помощью constructor's initialization list:

player::player() 
    : 
    maxHealth(100), 
    armorModifier(0), 
    playerLevel(), 
    gold(0), 
    currentHealth(maxHealth) 
{ 
} 

Конечно, вы должны опустить инициализаторами в определении класса, и вы бы все равно придется включать объявление для конструктора.

+0

и присвоение значений переменным-членам в объявлении класса также не допускается – WoJo

+0

@WoJo: Это, на C++ 11 –

+0

ОК, не знал, что :) – WoJo

Смежные вопросы