Четверг, 28 Марта 2024, 15:03

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Some errors, хелп
Some errors, хелп
SaiteiДата: Понедельник, 14 Июля 2014, 18:00 | Сообщение # 1
старожил
Сейчас нет на сайте
Код
#pragma once
class GameMenu
{
public:
  virtual void Update(sf::Time& dt);
  virtual void Render();
  GameMenu(void);
  ~GameMenu(void);
};

Код
#pragma once
#include "GameMenu.h"
class _MainMenu: public GameMenu
{
public:
  void Update(sf::Time& dt);
  void Render();
  _MainMenu(void);
  ~_MainMenu(void);
};


1
Цитата
>------ Перестроение всех файлов начато: проект: LastSpace, Конфигурация: Debug Win32 ------
1>Построение начато 14.07.2014 16:56:51.
1>_PrepareForClean:
1> Файл "Debug\LastSpace.lastbuildstate" удаляется.
1>InitializeBuildStatus:
1> Обращение к "Debug\LastSpace.unsuccessfulbuild".
1>ClCompile:
1> _MainMenu.cpp
1> launcher.cpp
1> GameResources.cpp
1> GameMenu.cpp
1> Game.cpp
1>c:\users\user\desktop\tls\lastspace\lastspace\game.cpp(17): warning C4244: =: преобразование "unsigned int" в "float", возможна потеря данных
1>c:\users\user\desktop\tls\lastspace\lastspace\game.cpp(22): warning C4244: =: преобразование "unsigned int" в "float", возможна потеря данных
1>c:\users\user\desktop\tls\lastspace\lastspace\game.cpp(38): warning C4244: аргумент: преобразование "float" в "unsigned int", возможна потеря данных
1>c:\users\user\desktop\tls\lastspace\lastspace\game.cpp(38): warning C4244: аргумент: преобразование "float" в "unsigned int", возможна потеря данных
1> Создание кода...
1>GameMenu.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall GameMenu::Update(class sf::Time &)" (?Update@GameMenu@@UAEXAAVTime@sf@@@Z)"
1>GameMenu.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall GameMenu::Render(void)" (?Render@GameMenu@@UAEXXZ)"
1>C:\Users\user\Desktop\TLS\LastSpace\Debug\LastSpace.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:12.29
========== Перестроение всех: успешно: 0, с ошибками: 1, пропущено: 0 ==========
Storm54Дата: Понедельник, 14 Июля 2014, 18:06 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Объявления есть, а где реализация? Компилятору именно это и не нравится.
SaiteiДата: Понедельник, 14 Июля 2014, 18:16 | Сообщение # 3
старожил
Сейчас нет на сайте
Storm54, кое-где забыл пустышки написать:
Код
void GameMenu::Update(sf::Time& dt)
{

}
void GameMenu::Render()
{

}

Спасибо, плюсую за помощь.
Как всегда наступаю на грабли в самых элементарных местах : )
Storm54Дата: Понедельник, 14 Июля 2014, 18:22 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Можете сделать класс или методы абстрактными, будет чуть более правильно.
SaiteiДата: Понедельник, 14 Июля 2014, 19:21 | Сообщение # 5
старожил
Сейчас нет на сайте
Storm54, например?
HPlusDieseДата: Понедельник, 14 Июля 2014, 20:28 | Сообщение # 6
участник
Сейчас нет на сайте
Цитата Saitei ()
например?

При наличии хотя бы одной чистой виртуальной функции, класс абстрактным становится.
Например так:
Код
virtual void Update(sf::Time& dt) = 0;
virtual void Render() = 0;


Сообщение отредактировал HPlusDiese - Понедельник, 14 Июля 2014, 20:44
SaiteiДата: Понедельник, 14 Июля 2014, 22:29 | Сообщение # 7
старожил
Сейчас нет на сайте
HPlusDiese, а что меняет добавление "=0"?
goldsphereДата: Вторник, 15 Июля 2014, 02:55 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Saitei, тебе не нужно конкретно в этом классе писать реализацию или пустышки, но ты обязан описать их в наследниках

FinderX - Android Аркада
morgloddddДата: Вторник, 15 Июля 2014, 06:59 | Сообщение # 9
участник
Сейчас нет на сайте
Цитата Saitei ()
а что меняет добавление "=0"?

Делает метод чисто виртуальным, не имеющим реализации.
Для использования дочернего класса от абстрактного, необходимо описать реализации методов.
абстрактный класс (по сути являющийся интерфейсом) может использоваться через указатели

при переопределении методов, лучше добавлять оператор override; если ты ошибешься с именем метода, компилятор выведет ошибку, если метод в родительском классе есть, ты 100% его переопределишь


Сообщение отредактировал morglodddd - Вторник, 15 Июля 2014, 06:59
Форум игроделов » Программирование » C/C++ » Some errors, хелп
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг