Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вызов нестатического метода из статического


Автор: En_t_end 27.8.2005, 11:41
При условии, что нестатический метод виртуален(хотя я думаю в данном контексте это не важно).
Есть ли какой-нибудь способ ?

Автор: Mayk 27.8.2005, 11:52
Код

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

?

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

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


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

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

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

... так как тот виртуальный метод я заново не описывал и он используется из класса родителя... 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 - smile , точно, не ребят дохлый номер, пойду легким путем...

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)