PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mehrdimensionales array extern verwenden?



musketaquid
03-02-2007, 14:58
Ich möchte einen 2-dimensionalen array extern verwenden.
Ich hatte vor, das so zu machen:


...
extern char word_dsp_buf[4][14];
...
void
glsdreh_init()
{
int i;
...

for (i=0; i<4; i++)
word_dsp_buf[i][0] = '\0';
...
}
...
void
center_puzzle(const char *s, int line, int n)
{
...
strncpy(&word_dsp_buf[line][0], s, n);
...
}
Aber da bekomm ich immer eine Fehlermeldung:
...undefined reference to 'word_dsp_buf'...
für glsdreh_init und center_puzzle.

Wenn ich dagegen den array lokal in der funktion definiere geht's.
void
center_puzzle(const char *s, int line, int n)
{
int i;
char word_dsp_buf[4][14];

for (i=0; i<4; i++)
word_dsp_buf[i][0] = '\0';

strncpy(&word_dsp_buf[line][0], s, n);
...
}

Aber was in den array kopiert wird, muss die ganze Laufzeit über gespeichert
bleiben und ich brauch den array auch für eine andere Datei.
Wie mach ich das?

anda_skoa
03-02-2007, 15:05
Wie sieht im ersten Fall die Stelle aus, an der du das Array definierst?
D.h. die Stelle wo das Array nicht extern markiert ist.

Ciao,
_

musketaquid
03-02-2007, 16:05
Da gibts keine andere Stelle, außer in einer header Datei.
Der array ist dort auch mit extern makiert.
extern char word_dsp_buf[4][14];

anda_skoa
03-02-2007, 16:59
Wenn es das Array nirgends wirklich gibt, wo soll der Linker es deiner Meinung nach finden? ;)

Du brauchst genau ein Vorkommnis, das dem Kompiler anweist, wirklich Speicher für das Array zu reservieren.

Du kannst zwar in C++ wie in einer Behörde auf einen anderen Zuständingen verweisen, nur im Gegensatz zu einer Behörde, muß es diesen Zuständigen auch geben :D

Ciao,
_

musketaquid
04-02-2007, 10:43
Du kannst zwar in C++ wie in einer Behörde auf einen anderen Zuständingen verweisen, nur im Gegensatz zu einer Behörde, muß es diesen Zuständigen auch geben
:D Wenn das mal nicht plastisch ist!

Hab mir K&R2 noch mal zu Gemüte geführt. Und da steht tatsächlich, das muss ich wohl irgendwann mal überlesen haben ;) , ein Absatz der beginnt so:

Man muss genau die Deklaration einer externen Variablen von ihrer Definition unterscheiden. ...
Dank deiner schönen Antwort, muss der Hund also genau dort begraben liegen!

Ich denke, ich krieg das jetzt schon hin. :)

Danke!