Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Sasha_Builder Гость
|
Добавлено: Вт Дек 25 2001 04:30 Заголовок сообщения: C++ Builder3: Как вызывать метод класса из "не-классовой" функции? |
|
|
Вот простой проект:
//File: Myproj2.cpp //--------------------------------------------#include #pragma hdrstop #include "Myproj2.h" //--------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //-------------------------------------------- vo.. __fastcall TForm1::Print_String(int x,int y,char *str) { Canvas-Font-Color = clBlack; Canvas-TextOut(x,y,str); }
void Non_TForm1_Func() { Print_String(20,400,"From NonForm1: This doesn't work!");
return; }
void __fastcall TForm1::Button1Click(TObject *Sender) { Non_TForm1_Func();
Print_String(20,200,"This works!");
} //--------------------------------------------
Pr.. - метод класса TForm1.
Существует функция Non_TForm1_Func(), которая не принадлежит классу TForm1. Нужно, чтобы из нее вызывалась функция Print_String(). При попытке скомпилировать этот проект выдается ошибка: [C++Error] Myproj2.cpp(25): Call to undefined function 'Print_String'. Хелп рекомендует использовать ключевое слово _export при объявлении функции, но все мои попытки вставлять его в объявление ни к чему не привели.
Кто-нибудь знает как выходить из положения?
Спасибо! |
|
Вернуться к началу |
|
|
TIMUR
Зарегистрирован: 21.03.2002 Сообщения: 15 Откуда: KURSK
|
Добавлено: Вт Дек 25 2001 04:39 Заголовок сообщения: Re: C++ Builder3: Как вызывать метод класса из "не-классовой" функции? |
|
|
Правильно что выдается ошибка! Ведь такой функции как Print_String() действительно нет. А есть Form1.Print_String(). Попробуй. |
|
Вернуться к началу |
|
|
Sasha_Builder Гость
|
Добавлено: Вт Дек 25 2001 05:19 Заголовок сообщения: Re: C++ Builder3: Как вызывать метод класса из "не-классовой" функции? |
|
|
Попробовал. Теперь выдает такое сообщение: [C++Error] Myproj2.cpp(25): Improper use of typedef 'TForm1'.
???? |
|
Вернуться к началу |
|
|
ilyasov Гость
|
Добавлено: Вт Дек 25 2001 13:54 Заголовок сообщения: Re:C++!!!, а не C++ Builder3: |
|
|
Ребята, вы бы хоть C++ поучили... Любой функции класса передается в качестве неявного параметра указатель на элемент данного класса. Посему любая попытка обратиться иначе будет приводить к ошибке. |
|
Вернуться к началу |
|
|
Sasha_Builder Гость
|
Добавлено: Вт Дек 25 2001 17:12 Заголовок сообщения: Обязательно поучу Re:C++, но все-таки как выйти из положения? |
|
|
ilyasov,
спасибо за ответ, но согласись так можно ответить на любой вопрос. А решение не подскажешь?
Timur предложил вроде бы решение (действительно, вызов функции члена класса должен быть "привязан" к объекту этого класса), но синтаксис ОбъектКласса.Функция() не работает, поэтому я о обратился за помощью.
По-прежнему буду благодарен за подсказку.
Саша |
|
Вернуться к началу |
|
|
ilyasov Гость
|
Добавлено: Вт Дек 25 2001 18:31 Заголовок сообщения: Re: Обязательно поучу Re:C++, но все-таки как выйти из положения? |
|
|
Если я правильно понял, то Вы вызываете функцию не с объектом класса, а с именем класса. Правильный вызов: TForm1 form1; form1.function(); Может пройти и вариант TForm1 *form1; form1-function(); но только в том случае, когда функция не обращается к параметру this |
|
Вернуться к началу |
|
|
Sasha_Builder Гость
|
Добавлено: Вт Дек 25 2001 19:21 Заголовок сообщения: Re: Обязательно поучу Re:C++, но все-таки как выйти из положения? |
|
|
Спасибо, ilyasov,
дело было в том, что вместо ОбъектКласса.Функция() нужно было сделать ОбъектКласса-Функция()
Теперь работает -- вернее полезли настоящие баги, но это уже дело отладки...
Спасибо еще раз!
Саша. |
|
Вернуться к началу |
|
|
|