creater |
Отправлено: 29.10.2003, 14:52 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 120
|
Народ, объясните ламеру как сделать.
Есть основная форма при работе с которой вызываются некоторые функции. И есть еще одна форма, которая может вызываться по нажатии бутона, при работе с которой так же возможен вызов тех же самых функций.
Как эти функции куда-нить поместить чтобы при необходимости их вызывать? |
|
Георгий |
Отправлено: 30.10.2003, 01:29 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Может я что то не так понял, но если их прототипы поместить в файл заголовков, который включить в нужные файлы, то всё будет хорошо. |
|
creater |
Отправлено: 30.10.2003, 07:36 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 120
|
QUOTE (Георгий @ 30/10/2003, 02:31) | Может я что то не так понял, но если их прототипы поместить в файл заголовков, который включить в нужные файлы, то всё будет хорошо. |
Т.е. как?
Вот допустим у меня есть в Unit1.cpp ряд функций. Которые идут самые первые.
Функции типа:
void __fastcall WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue);
Далее Я хочу вызвать эту функцию в another_fileform.cpp и прописываю их прототипы в another_fileform.h
На строку в которой Я вызываю эту функцию он перестает ругаться. Но после выдает, что Unresolved external TForm2::WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue); referenced from ... |
|
Asher |
Отправлено: 30.10.2003, 09:18 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Все верно. Так и должно ругаться. Ты не создал реализации.
Если сделать по-простому, то
В cpp-файл Unit2 надо добавить include "Unit1.h" и далее юзать нужные функции из Unit1 через Form1->...имя функции
|
|
Георгий |
Отправлено: 30.10.2003, 09:29 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Так это у тебя методы класса или всё таки функции? |
|
creater |
Отправлено: 30.10.2003, 13:14 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 120
|
QUOTE (Георгий @ 30/10/2003, 10:31) |
Так это у тебя методы класса или всё таки функции? |
Просто функции.
Но ошибку выдает как
Unresolved external TForm2::WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue); referenced from another_fileform.obj |
|
Георгий |
Отправлено: 30.10.2003, 21:35 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Былобы интересно на это посмотреть в живую — приложи покромсаный проектик. |
|
creater |
Отправлено: 31.10.2003, 14:47 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 120
|
QUOTE (Георгий @ 30/10/2003, 22:37) | Былобы интересно на это посмотреть в живую — приложи покромсаный проектик. |
Здесь ругается на строчку 1, во втором куске : Call to undefindet funcion "WriteIni"
Причем в Unit2, #include "Unit1.h" делаю.
И причем из Unit2 функция ShowBox() вызывается.
Почему ругается на вызов "WriteIni"?
Кусок 1 (основной формы)
//---------------------------------------------------------------------------
#include
#include
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.cpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
void __fastcall WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue)
{
TIniFile *sIniFile;
sIniFile=new TIniFile(ChangeFileExt( Application->ExeName, ".INI"));
sIniFile->WriteString(ASection, AString, AValue);
delete sIniFile;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
WriteIni("level1", "name", "1");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowBox();
}
//---------------------------------------------------------------------------
Кусок 2 (форма вызываемая нажатием бутона)
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall ShowBox()
{
TForm2* a = new TForm2(Application);
try{
a->ShowModal();
}
catch(...){
a->Free();
throw;
}
a->Free();
}
void __fastcall TForm2::FormCreate(TObject *Sender)
{
WriteIni("level2", "name", "2"); //1
}
//--------------------------------------------------------------------------- |
|
Георгий |
Отправлено: 31.10.2003, 15:57 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Уже жалею, что просил показать кусок
это что такое?
QUOTE | #include "Unit2.cpp"
|
Вместо этого надо или
или жмиCODE | File->Include Unit Hdr-> и выбирай нужный тебе модуль |
(что впрочем эквивалентно первому способу)
Теперь — файл заголовков — Unit1.h редактировал?
в нём должна быть такая строчка
CODE | void __fastcall WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue); | |
|
creater |
Отправлено: 31.10.2003, 18:13 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 120
|
QUOTE |
Уже жалею, что просил показать кусок
|
Это еще ничего, Я просто создал новый проект безо всяких вырезок
QUOTE |
это что такое?
#include "Unit2.cpp"
Вместо этого надо или
#include "Unit2.h"
|
В общем то после этого ничего не изменилось
QUOTE |
Теперь — файл заголовков — Unit1.h редактировал?
в нём должна быть такая строчка
CODE | void __fastcall WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue); |
|
Да-да, она там есть.
Но при компиляции ругается на строку вызова WriteIni в Unit2.cpp |
|
Георгий |
Отправлено: 31.10.2003, 19:04 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Сдаюсь....
Unit1.cpp
CODE | //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <inifiles.hpp>
#include "Unit1.h"
#include "unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue)
{
TIniFile *sIniFile;
sIniFile=new TIniFile(ChangeFileExt( Application->ExeName, ".INI"));
sIniFile->WriteString(ASection, AString, AValue);
delete sIniFile;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowBox();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
WriteIni("level1", "name", "1");
}
//--------------------------------------------------------------------------- |
Unit1.h
CODE | //---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
void __fastcall WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue);
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
|
Unit2.cpp
CODE | //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall ShowBox(void)
{
TForm2* a = new TForm2(Application);
try{
a->ShowModal();
}
catch(...){
a->Free();
throw;
}
a->Free();
}
void __fastcall TForm2::FormCreate(TObject *Sender)
{
WriteIni("level2", "name", "2");
}
//--------------------------------------------------------------------------- |
Unit2.h
CODE | //---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
void __fastcall ShowBox(void);
class TForm2 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
|
оно У меня нормально компилится и, даже, работает.
|
|
creater |
Отправлено: 31.10.2003, 20:20 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 120
|
Спасибо большое.
Дело было (в генах :-)) ) в в том, что Я в Unit1.h
void __fastcall WriteIni(AnsiString ASection, AnsiString AString, AnsiString AValue);
поместил в тело class TForm1 , а не перед ним.
Все работает. |
|