| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Вызов нестатического метода из статического |
| Автор: En_t_end 27.8.2005, 11:41 |
| При условии, что нестатический метод виртуален(хотя я думаю в данном контексте это не важно). Есть ли какой-нибудь способ ? |
| Автор: Mayk 27.8.2005, 11:52 | ||||
? Добавлено @ 11:55 Ну или вот ещё:
|
| Автор: En_t_end 27.8.2005, 12:02 | ||||
| Mayk У меня немного другой случай. Скорее всего проблема именно в виртуальности нестатичного метода. К примеру:
Добавлено @ 12:07
... так как тот виртуальный метод я заново не описывал и он используется из класса родителя... class SomeClass : public ParClass Класс родитель и его виртуальный метод NonStaticVirtual() описан в другом заголовочном файле, и реализован в другом исполняемом. Поэтому мне кажется, компилятор не может задействовать виртуальный метод, так как он не является статичном в какой-либо мере для данного члена компиляции. |
| Автор: En_t_end 27.8.2005, 12:22 |
| Кстати вариант с принудительным приведением к статическому члену привел к появлению исключения, вероятно все таки VISUAL STUDIO 2003 не умеет правильно статить виртуальные методы, оставляя в ссылке адрес на локальный метод. |
| Автор: Mayk 27.8.2005, 12:47 |
| Попробуй вот так вызвать static_cast<ClassWithVirtualFunc*>(NULL)->ClassWithVirtualFunc::virtualFunc(); |
| Автор: En_t_end 27.8.2005, 12:56 |
| Mayk Исключение, увы... |
| Автор: Mayk 27.8.2005, 12:57 |
| А ты уверен, что виртуальный метод не обращается к нестатическим переменным класса? |
| Автор: En_t_end 27.8.2005, 13:00 |
| Mayk Точно обращается, 100 %, так как имя этого метода EndDialog - |
| Автор: maxim1000 27.8.2005, 14:52 |
| когда из статического метода вызывается нестатический (неважно, виртуальный или нет), всегда нужно понять (и дать понять компилятору), для какого объекта нужно его вызвать а все данные о виртуальных функциях привязываются именно к объекту |