Форум программистов, компьютерный форум CyberForum.ru

Ошибка в композиции классов. - C++

Восстановить пароль Регистрация
 
fankrot
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 11
27.04.2011, 14:11     Ошибка в композиции классов. #1
Приветствую вас!
Прошу помощи, ибо уже не в силах себе помочь. Я новичек в кодинге, сейчас пишу игру Пакмана, но появилась проблема:

есть класс Game:
Код
class Game {
public:
        Game();
	void Run() {Engine.Work(); } // вызов этого метода дает ошибку

private:
	Engine Engine;
};
есть класс Engine:
Код
class Engine {
public:
	Engine();
	void Work() { PackMen.Move() }; // вызов этого метода тоже дает ошибку
	void KeyParser(const char *) const;

private:	
	Person PackMen;
};
и есть класс Person:
Код
class Person {
public:
	Person();
	void Move() { }; //просто пустой метод

};
Вызываю метод Work класса Engine, который должен вызвать метод Move класса Person, но почему то вылетает ошибка:

error C2662: 'Move' : cannot convert 'this' pointer from 'const class Person' to 'class Person &'

Помогите люди добрые.. С ума схожу. Есть огромное желание написать прогу, все уже продумано, но из за это ошибки не могу продолжать((.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.04.2011, 14:17     Ошибка в композиции классов. #2
const class Person' to 'class Person &'
Не получается привести константный тип к НЕ константному. Ты вызываешь не константный метод из объекта, объявленного как константа.

Добавлено через 32 секунды
Видимо, ты объявил const Engine.

Добавлено через 1 минуту
Знаешь, раз у тебя такие вопросы возникают, то для Пакмена тебе ещё рановато.)
ИИ запрограммировать не сможешь. Попробуй тетрис/лайнс/змейку для начала.)
fankrot
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 11
27.04.2011, 14:24  [ТС]     Ошибка в композиции классов. #3
Движок - неконстантный класс. Он объявлен как
Конструктор класса Game:
Код
Game::Game(HANDLE *phConsole) : Engine(phConsole) { //передаю адрес указателя на консоль в "движок"

}
Может передавая значения в конструктор Engine я делаю его константным??

Выше я описывал классы сокращенно.. Без лишних функций, может именно из за них проблемы. Прикрепил полный проект.
Вложения
Тип файла: rar ПакМен.rar (1.18 Мб, 10 просмотров)
fankrot
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 11
27.04.2011, 14:40  [ТС]     Ошибка в композиции классов. #4
void Engine::KeyParser(const char *key) const

Вот оно что! Я туплю, я ж обработчик событий назначил константным и в нем вызываю неконстантный метод, Deviaphan спасибо!!
Теперь можно дальше творить.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.04.2011, 15:28     Ошибка в композиции классов. #5
KeyParser - константный метод. В нём нельзя изменять поля объекта Engine ни напрямую, ни косвенно. Move - не константный метод. Его нельзя тут вызвать. Убери квалификатор const из KeyParser.
Yandex
Объявления
27.04.2011, 15:28     Ошибка в композиции классов.
Ответ Создать тему
Опции темы

Текущее время: 04:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru