Zweidimensionales Array an Funktion übergeben



  • warum wollt ihr es global deklarieren? ihr könnt es doch per funktionsparameter aus dem Hauptprogramm übergeben.
    aber ansonsten per extern, dann ist es global in der jeweiligen. cpp und sollte überall aufrufbar sein.
    Instanziierungen, bzw. Definitionen sind in headern imo nicht möglich.



  • Es ginge auch per Übergabe aber wir wollen es global machen.
    Kannst du uns bitte die Syntax schreiben, wie es man es korrekt deklariert.
    Wir haben bis jetzt im Hauptprogramm global deklariert:

    bool array [5] [6];
    

    Und in der anderen .cpp ebenfalls global:

    extern bool array;
    

    Das funzt nich... Compiler schmeißt einen Fehler.



  • DocJunioR schrieb:

    ist dann zwar richtig, aber hochgradig gefährlich, weil überhaupt nicht wiederverwendbarer code.

    Das stimmt nicht.

    DocJunioR schrieb:

    ...dann ist es global in der jeweiligen. cpp und sollte überall aufrufbar sein.

    In C haben die Dateien die Endung *.c

    DocJunioR schrieb:

    Instanziierungen, bzw. Definitionen sind in headern imo nicht möglich.

    Das ist falsch.

    @el-niki & resis

    // xyz1.c
    int array[3][4];

    // xyz2.c
    extern int array[3][4];



  • lass dich bloß nich dazu hinreißen, deine aussagen mal zu begründen..
    ja, in c heißt des .c, nich .cpp ist aber die gleiche mimik.
    btw: aufgrund der endung wirds auch kein besserer stil.



  • lölöjlöölöl schrieb:

    @el-niki & resis

    // xyz1.c
    int array[3][4];

    // xyz2.c
    extern int array[3][4];

    Das funzt leider nicht. Ham wir auch schon probiert.
    Wir benutzen c++, macht das vielleicht einen Unterschied?



  • da muss schon eine von beiden die andere inkludieren..



  • el-niki schrieb:

    Wir benutzen c++, macht das vielleicht einen Unterschied?

    Ja, C++ kann das nicht.


  • Mod

    el-niki schrieb:

    lölöjlöölöl schrieb:

    @el-niki & resis

    // xyz1.c
    int array[3][4];

    // xyz2.c
    extern int array[3][4];

    Das funzt leider nicht. Ham wir auch schon probiert.
    Wir benutzen c++, macht das vielleicht einen Unterschied?

    "funzt nicht" ist keine Fehlerbeschreibung - der schlampige Umgang mit Typspezifikationen lässt auch spezifische Vermutungen hinsichtlich des Fehlers nicht zu:

    bool array [5] [6];
    

    und

    extern bool array;
    

    sind natürlich nicht kompatibel.



  • Und wie macht man das? Kannst du mir bitte die Syntax dazu schicken?



  • extern bool array[][];

    würdsch mal so tippen.. befasse mich aber unoft mit sowas..



  • OK, ich halte fest: Wir können globale zweidimensionale Arrays nicht in anderen cpp-Dateien verwenden, es sei denn wir benutzen Zeiger, richtig?
    Falls es doch möglich ist, bitte ich um die korrekte Syntax.



  • DocJunioR schrieb:

    extern bool array[][];

    würdsch mal so tippen.. befasse mich aber unoft mit sowas..

    Das funktioniert leider nicht. Fehlermeldung: Feldindex fehlt.



  • ich sag ja, ich mach das nie.. habs in den letzten 10 Jahren nicht gebraucht..



  • el-niki schrieb:

    Und wie macht man das? Kannst du mir bitte die Syntax dazu schicken?

    el-niki schrieb:

    OK, ich halte fest: Wir können globale zweidimensionale Arrays nicht in anderen cpp-Dateien verwenden, es sei denn wir benutzen Zeiger, richtig?
    Falls es doch möglich ist, bitte ich um die korrekte Syntax.

    so ist korrekt:
    // xyz1.c
    int array[3][4];

    // xyz2.c
    extern int array[3][4];



  • Wie gesagt, ham wir auch schon probiert. Funktioniert ebenfalls nicht.
    Fehlermeldung: fatal error LNK1120: 10 nicht aufgelöste externe Verweise



  • el-niki schrieb:

    Wie gesagt, ham wir auch schon probiert. Funktioniert ebenfalls nicht.
    Fehlermeldung: fatal error LNK1120: 10 nicht aufgelöste externe Verweise

    wenn ich das mit dem c++ compiler übersetzen will, krieg ich den gleichen fehler.
    aber mit c compiler funzt das.


  • Mod

    el-niki schrieb:

    Fehlermeldung: fatal error LNK1120: 10 nicht aufgelöste externe Verweise

    Und wie lauten diese Verweise?

    x.cpp

    extern int a[3][4];
    int main() { a[0][0]=1; }
    

    y.cpp

    int a[3][4];
    

    ergibt ein einwandfreies Programm.

    extern int a[][4];
    

    ist ebenfalls möglich.



  • aaaah !
    den link error krieg ich wenn ich c und cpp dateien mische.
    jetzt hab ich es getrennt probiert mit nem c und c++ compiler, funzt beides !


  • Mod

    jajajajaaaaaaa schrieb:

    aaaah !
    den link error krieg ich wenn ich c und cpp dateien mische.
    jetzt hab ich es getrennt probiert mit nem c und c++ compiler, funzt beides !

    Fürs Mischen gibt es extern "C" - diese mögliche Fehlerquelle kann aber nach den Ausführungen des OP ausgeschlossen werden.



  • camper schrieb:

    jajajajaaaaaaa schrieb:

    aaaah !
    den link error krieg ich wenn ich c und cpp dateien mische.
    jetzt hab ich es getrennt probiert mit nem c und c++ compiler, funzt beides !

    Fürs Mischen gibt es extern "C" - diese mögliche Fehlerquelle kann aber nach den Ausführungen des OP ausgeschlossen werden.

    ok, hab ich wohl nicht allzu deutlich beschrieben.
    ich habe ein testprojekt mit ner main.c drin, compiler ist auf c gestellt.
    dann füge ich ne datei test.cpp dazu und schreib dort int arr[3][3]; rein.
    in main.c schreibe ich extern int arr[3][3]; und mach nen zugriff, z.b. arr[0][0] = 1.
    dann bekomme ich die selbe fehlermeldung wie der op.

    mfg
    jajajajaaaaaaa


Anmelden zum Antworten