Avatar billede bjarke Nybegynder
30. november 2000 - 15:35 Der er 13 kommentarer og
1 løsning

Units i Builder

Jeg har lavet en klasse \"Table\", som ligger i \"Table.cpp\", hvor \"Table.h\" er inkluderet.

I min primære unit \"effect.cpp\" er \"Table.h\" også inkluderet.

Jeg skal bruge et objekt af klassen \"Table\", men jeg kan åbenbart ikke bare erklære det som \"Table table\" i \"effect.cpp\".

Hvad gør jeg forkert?
Avatar billede dmk Nybegynder
30. november 2000 - 15:53 #1
Hvilken fejlbesked får du?
Avatar billede bjarke Nybegynder
30. november 2000 - 16:00 #2
[C++Error] effekt.cpp(26): Declaration syntax error.
[C++Error] effekt.cpp(106): Undefined symbol \'table\'.
Avatar billede dmk Nybegynder
30. november 2000 - 16:02 #3
Æhh, du har lavet definitionen af Table klassen i Table.h, og ikke Table.cpp, right?
Avatar billede bjarke Nybegynder
30. november 2000 - 16:11 #4
Ok, nu bliver det lidt pinligt. Jeg ved ikke helt hvordan tingene skal organiseres (hvilket nok også fremgår af mit spørgsmål).

Det eneste jeg har i Table.h er det Builder selv har genereret:

*********** Table.h - genereret af Builder **********
//---------------------------------------------------------------------------
#ifndef TableH
#define TableH
//---------------------------------------------------------------------------
#endif


Jeg prøvede at tilføje klassedefinitionen i Table.h, men fik bare mange flere fejlmeddelelser (blandt andet flere med noget i retning af \"Multiple declaration....\" og \"Earlier declaration...\").
Avatar billede dmk Nybegynder
30. november 2000 - 16:16 #5
Okay, du skal have alle dine definitioner af klasser, structs og alt muligt andet i dine headerfiler. cpp-filen skal benyttes til at implementere funktioner i. Det gør du sådan her:

i headerfilen:

class XX {
  void func();
};

I CPP filen:

void XX:func()
{

}


Når du inkluderer en .h fil, vil compileren kende til alt det du har defineret i din h fil. Men alt hvad der defineres i en cpp fil, vil kun kendes af alt det kode der kommer EFTER den definition, og kan altså kun benyttes lokalt i den fil.

class x{
  y a_y;
};

class y
  x a_x;
};

I dette tilfælde vil den ikke kunne compile class x, da den har en menber-variabel, som compileren endnu ikke er har set definitionen på. Den kan godt compile class y, da den har set definitionen på class x tidligere i samme fil.

Jeg håber det hjalp lidt?

DMK
Avatar billede bjarke Nybegynder
30. november 2000 - 16:19 #6
Table.h
------------------------------------
#ifndef TableH
#define TableH
#endif
------------------------------------

Table.cpp
------------------------------------
#include \"Table.h\"

class Table
...
------------------------------------

Effect.cpp
------------------------------------
#include \"Table.h\"

Table table;

void __fastcall....
{
  table.initialize();
  ...
}
Avatar billede bjarke Nybegynder
30. november 2000 - 16:26 #7
Ovenstående var fordi jeg ikke havde set dit svar.

Tak for hjælpen. Jeg tror det kører nu :-)
Avatar billede bjarke Nybegynder
30. november 2000 - 16:36 #8
dmk lige en detalje mere (gider du?)

I Table.cpp kan jeg ikke kalde objekterne fra formen - hvordan klarer jeg den? (jeg har prøvet at include effekt.h uden held).
Avatar billede dmk Nybegynder
30. november 2000 - 16:53 #9
Hvis table.cpp skal kunne kalde et objekt fra din form, så skal du have en pointer til formen med i klassen til table.h. Det vil sige, at du måske skal lade din klasse initialiseres som noget i stil med:

class Table
{
  MyForm* Form;
  Table(MyForm* inForm) {Form=inForm; }
};

Så vil du have en pointer på din Table, som du kan tilgå på normal vis:
Form->SomeFunction();

Det er rigtigt at Table.h skal inkludere effekt.h, for at kende til din form. Men det kan godt give nogle problemer, hvis to headerfiler inkluderer hinanden. Jeg kan ikke rigtigt huske, hvordan Builder har det med det, men du kan jo prøve dig frem.

DMK
Avatar billede bjarke Nybegynder
30. november 2000 - 16:58 #10
Ok, men hvordan får constructoren MyForm som parameter?
Avatar billede dmk Nybegynder
30. november 2000 - 17:09 #11
Når du laver et objekt af klassen Table, skal du bare give den en pointer til din form med. Det kan du gøre sådan her (hvis du står i en funktion i din form):

Table table(this);


DMK
Avatar billede bjarke Nybegynder
30. november 2000 - 17:14 #12
Hmm. Det virker ikke helt. Jeg kigger videre i morgen, men tak for hjælpen.

Hvis du eventuelt har et godt link om \"fler-fils-programmer\" (i Builder), så vil jeg da meget gerne have det.
Avatar billede bjarke Nybegynder
01. december 2000 - 16:51 #13
Kanon dmk. Mange tak for hjælpen. Nu kører det bare :-)

-Bjarke
Avatar billede virtualfriend Nybegynder
28. januar 2001 - 17:17 #14
Husk altid at deklarere dine variabler
før du bruger dem..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester