Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2011, 12:51   #1
ТриСемёрки
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 61
По умолчанию Виртуальные классы в С++????

Перебираю чужую прогу. Столкнулся с виртуальным классом. Что это такое? (С понятием виртуальных методов и абстрактных класов знаком.) Всё бы ничего, но компилятор выдаёт ошибку (место хранения h-файла, содержащего этот "виртуальный класс"):
Код:
#pragma once

/*
Базовый класс всех элементов модели.
Сделан виртуальным, чтобы нельзя было создать объект этого класса.

state - это состояние объекта.
GetState() - возвращает состояние объекта.
ReceiveRequest() - вызывается при получении объектом заявки.
SendRequest() - вызывается при отдаче объектом заявки.
*/
virtual class CModelBase
{
protected:
	int state;
public:
	CModelBase(void);
	~CModelBase(void);

	void ReceiveRequest();
	void SendRequest()
	{
		if (state > 0)
			state--;
	}

	int GetState(void);
};
Может быть всё дело в компиляторе (у меня Builder)? Применение стража #ifdef... ситуацию не спасает.
ТриСемёрки вне форума Ответить с цитированием
Старый 06.08.2011, 13:25   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

начнем с того, какую ошибку выдает? если у вас билдер, то могу предположить, что он не переваривает #pragma once - это студийная штуковина
counter вне форума Ответить с цитированием
Старый 06.08.2011, 14:11   #3
ТриСемёрки
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 61
По умолчанию

Ошибка такая:
Код:
[C++ Error] modelbase.h(15): E2092 Storage class 'virtual' is not allowed here
Ешё раз повторюсь Применение стража #ifdef... ситуацию не спасает.
ТриСемёрки вне форума Ответить с цитированием
Старый 06.08.2011, 14:14   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

методы должны быть виртуальными а не класс.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.08.2011, 14:15   #5
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

написан бред, никаких "виртуальных классов" нет
могут быть виртуальные медоты, может быть виртуальное наследование, но не класс
alex_x_x вне форума Ответить с цитированием
Старый 06.08.2011, 14:39   #6
artush1984
Форумчанин
 
Аватар для artush1984
 
Регистрация: 27.04.2009
Сообщений: 184
По умолчанию

Цитата:
Перебираю чужую прогу
А чужая прога раньше работала??? ))
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
artush1984 вне форума Ответить с цитированием
Старый 06.08.2011, 14:40   #7
ТриСемёрки
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 61
По умолчанию

На счёт бреда согласен (повторю, перебираю чужую прогу). Попробую переписать через абстрактный класс...
И на всякий случай прикладываю всю прогу (может дело не в виртуальном классе?)

Программа рабочая.
Вложения
Тип файла: rar Прога по САИММ.rar (45.5 Кб, 12 просмотров)
ТриСемёрки вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
виртуальные функции vanek1 Помощь студентам 1 08.06.2011 17:49
Виртуальные методы Kn793 Общие вопросы C/C++ 5 26.06.2010 15:08
Виртуальные системы. jojahti Софт 12 27.01.2010 14:54
Виртуальные функции bigory Помощь студентам 2 06.06.2009 22:44
Виртуальные машины! Marsik Софт 17 23.04.2008 20:33