Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fankrot
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 11
#1

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

27.04.2011, 14:11. Просмотров 514. Ответов 4
Метки нет (Все метки)

Приветствую вас!
Прошу помощи, ибо уже не в силах себе помочь. Я новичек в кодинге, сейчас пишу игру Пакмана, но появилась проблема:

есть класс 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 &'

Помогите люди добрые.. С ума схожу. Есть огромное желание написать прогу, все уже продумано, но из за это ошибки не могу продолжать((.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2011, 14:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в композиции классов. (C++):

Написать программу с использованием композиции классов - C++
Создайте класс Bankomat (банкомат), используя для представления класс Money (Деньги). Класс Bankomat моделирует работу банкомата. В...

Композиции на основе собственных типов - C++
Здравствуйте. Пытаюсь написать реализацию простенького хештебла на основе связных цепочек для хранения дубликатов столкнулся с...

ошибка классов - C++
подскажите сделал вот такую программку. #include <iostream> #include <string> #include <vector> using namespace std; int...

Ошибка инициализации классов - C++
Доброго времени суток, Я в основном программирую на C#, но вот решил попробовать плюсы. И облом при первой же попытке, в шарпе при...

Ошибка неразрушимости классов - C++
//=======================Код========= ======================= #include <gl/glut.h> #include <stdio.h> #include <fstream> #include...

Наследование классов - ошибка в коде - C++
Пожалуйста, помогите понять, в чем ошибка. В производном классе значение имени берется из конструктора по умолчанию базового класса. Как...

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

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

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

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

Выше я описывал классы сокращенно.. Без лишних функций, может именно из за них проблемы. Прикрепил полный проект.
0
Вложения
Тип файла: 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 спасибо!!
Теперь можно дальше творить.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.04.2011, 15:28 #5
KeyParser - константный метод. В нём нельзя изменять поля объекта Engine ни напрямую, ни косвенно. Move - не константный метод. Его нельзя тут вызвать. Убери квалификатор const из KeyParser.
1
27.04.2011, 15:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2011, 15:28
Привет! Вот еще темы с ответами:

Ошибка в инициализации базовых классов - C++
Привет. Пишу код из книги Лафоре. #include <iostream> using namespace std; #include <windows.h> enum posneg {pos, meg}; class...

Шаблоны классов. Ошибка параметра по умолчанию - C++
Есть template <class data_type> class List; и typedef unsigned char point_dist; template <class data_type = point_dist> class...

Использование классов. Где закралась ошибка? - C++
Добрый день! При компиляции данной программы на экран выводится только надпись: "Для продолжения нажмите любую клавишу...". Возможно...

Ошибка при компиляции с методами классов - C++
При компиляции кода выдает следующие ошибки: \main.cpp(44) : error C2511: 'double P::area(double,double,double)' : overloaded member...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru