Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > доступ из winmain в unit1.h


Автор: Annihilator 12.5.2008, 13:04
В Unit1.h у меня есть класс
Код

class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TMainMenu *MainMenu1;
    TOpenDialog *OpenDialog1;
    ........................
    void __fastcall Button4Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
    void __fastcall do_it(bool);  // ее надо потом вызвать
};
void __fastcall TForm1::do_it(bool write=false)
{
........................
  ifstream in(c);
.........................
}



в Project.cpp вот так

Код

#include "Unit1.h"
#pragma hdrstop

//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
#pragma argsused
WINAPI WinMain(..............)
{
  do_it(true); // здесь хочу вызвать функцию-член класса
.............
}
но ничего не компилируется а вылетают ошибки типа
undefined symbol 'ifstream'
qualifier 'ios' is not a class or namespace name
Function call missing )
 и т.д.

Вопрос ОТКУДА? Ведь если вызвать эту функцию из файла Unit1.cpp все работает
вот так допустим
Код

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    do_it(true);
}

Автор: xvr 12.5.2008, 13:44
Во первых, project.cpp должен начинаться с 
Код

#include <vcl.h>
#pragma hdrstop

а не с 
Код

#include "Unit1.h"
#pragma hdrstop

Во вторых, вызвать do_it напрямую из WinMain не получится, do_it это функция КЛАССА, и для вызова ей нужен экземпляр класса, например так
Код

Form1->di_it(true);

только надо убедится, что Form1 в этом месте уже проинициализированна (т.е. сама форма уже созданна)

Цитата(Annihilator @  12.5.2008,  13:04 Найти цитируемый пост)
Вопрос ОТКУДА? Ведь если вызвать эту функцию из файла Unit1.cpp все работает
вот так допустим

Код

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    do_it(true);
}

В этом случае функция-член класса вызывается из другой функции-члена которая и передает ей экземпляр класса от которого она сама была вызванна

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