Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов нестатического метода из статического 
:(
    Опции темы
En_t_end
Дата 27.8.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



При условии, что нестатический метод виртуален(хотя я думаю в данном контексте это не важно).
Есть ли какой-нибудь способ ?
PM MAIL ICQ Skype GTalk Jabber   Вверх
Mayk
Дата 27.8.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Код

Blahblah* blah = new Blahblah; blah->nonStatic(); delete blah;

?

Добавлено @ 11:55
Ну или вот ещё:
Код

//1 вариант
A* s = 0;
s->a();
//2 вариант, то же самое
static_cast<A*>(NULL)->a();



Это сообщение отредактировал(а) Mayk - 27.8.2005, 11:52


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
En_t_end
Дата 27.8.2005, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Mayk
У меня немного другой случай. Скорее всего проблема именно в виртуальности нестатичного метода.
К примеру:
Код

void SomeClass::SomeStaticFunc()
{
NonStaticVirtual();
}

Добавлено @ 12:07
Цитата(En_t_end @ 27.8.2005, 16:02)
Скорее всего проблема именно в виртуальности нестатичного метода.

... так как тот виртуальный метод я заново не описывал и он используется из класса родителя... class SomeClass : public ParClass
Класс родитель и его виртуальный метод NonStaticVirtual() описан в другом заголовочном файле, и реализован в другом исполняемом. Поэтому мне кажется, компилятор не может задействовать виртуальный метод, так как он не является статичном в какой-либо мере для данного члена компиляции.

PM MAIL ICQ Skype GTalk Jabber   Вверх
En_t_end
Дата 27.8.2005, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Кстати вариант с принудительным приведением к статическому члену привел к появлению исключения, вероятно все таки VISUAL STUDIO 2003 не умеет правильно статить виртуальные методы, оставляя в ссылке адрес на локальный метод.
PM MAIL ICQ Skype GTalk Jabber   Вверх
Mayk
Дата 27.8.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Попробуй вот так вызвать
static_cast<ClassWithVirtualFunc*>(NULL)->ClassWithVirtualFunc::virtualFunc();



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
En_t_end
Дата 27.8.2005, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Mayk
Исключение, увы...
PM MAIL ICQ Skype GTalk Jabber   Вверх
Mayk
Дата 27.8.2005, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



А ты уверен, что виртуальный метод не обращается к нестатическим переменным класса?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
En_t_end
Дата 27.8.2005, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Mayk
Точно обращается, 100 %, так как имя этого метода EndDialog - smile , точно, не ребят дохлый номер, пойду легким путем...
PM MAIL ICQ Skype GTalk Jabber   Вверх
maxim1000
Дата 27.8.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



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


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0841 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.