Fehlermeldung struct bereits in main.obj definiert



  • hiho

    ich möchte gerne mein Pogramm spliten ging bis jetzt auch einwandfrei nur seit dem leten compilieren brint er mir die Fehlermeldung das mein struct bereits in der main.obj definiert ist.

    Wenn ich aber 'extern' vor struct setze, kommt die Meldung das es nur or variablen geht, setz ich das 'extern' vor einer variablen funktioniert die sruct struktur nicht mehr ... *seufz*

    // matrix.h
    #ifndef MATRIX_H
    #define MATRIX_H
    
    #define MAX_ZEILE 2
    #define MAX_REIHE 5
    
    struct matrix
    {
    	char c_array[MAX_ZEILE][MAX_REIHE];
    };
    
    char *get_char(int z, int r);
    
    matrix vareins = {
    			{			
    					{' ','x','x','x',' '},
    			 		{' ','x','x','x',' '}
    							}
    					};
    matrix varzwei = {
    			{
    					{' ',' ',' ','x',' '},
    					{' ',' ',' ','x',' '}
    							}
    					};
    
    /////////////////////////
    matrix.cpp
    
    #include <iostream>
    #include "matrix.h"
    using namespace std;
    
    char *get_char(int z, int r)
    {
    cout << &vareins.c_array[z][r];
    
    }
    
    // abgesehen der include-Anweisungen und der grundstruktur ist die main leer
    

    als Fehler erhalte ich:

    .. @@3Umatrix@@A) ist bereits in main.obj definiert...
    

    Als Lösung bietet sich doch da nur extern an oder? da wo ich es immer hingepackt habe war es falsch -.-



  • Kann es sein, dass ein #endif vergessen wurde?



  • nee, #endif steht drin nur ziemlich weit unten. deswegen ists nicht mit ins copy&past gerutscht :>



  • Was willst du mit globalen Objekten? Und wenn dann, bitte

    extern
    

    nutzen ...



  • Ich habe mal weiter gearbeitet aber compilieren läßt es sich nicht 8(

    #ifndef IX_H
    
    #define MAX_ZEILE 8
    #define MAX_REIHE 5
    
    struct matrix
    {
    	char c_array[MAX_ZEILE][MAX_REIHE];
    };
    
    char *get_pixels_for_char(int uZEILE, int uREIHE, char uWAHL);
    
    matrix musternull = {
    						{		// NULL
    							    {' ','x','x','x',' '},
    								{'x',' ',' ',' ','x'},
    								{'x',' ',' ','x','x'},
    								{'x',' ','x',' ','x'},
    							    {'x',' ','x',' ','x'},
    								{'x','x',' ',' ','x'},
    								{'x',' ',' ',' ','x'},
    								{' ','x','x','x',' '}
    							}
    					};
    
    #endif
    
    // ... cut sind noch mehrere Felder mit Buchstaben und Zahlen ... ///
    

    Wo deklariere und initialsiere ich am besten die ganzen Felder? in der Main wird es doch sicherlich zu unuebersichtlich?



  • Du könntest den Typ "matrix" statt als Struktur eher als typedef auf char[MAX_ZEILE][MAX_REIHE] anwenden, dann klappt die Initialisierung - vorausgesetzt natürlich, du büßt damit nicht irgendwas anderes ein, dass z.B. die struct "matrix" noch weitere Variablen bekommen soll oder so 😉



  • Erstens: Auf was genau bezieht sich denn der Linker-Fehler (normalerweise sollte der auch den Namen ohne die Compiler-generierten Ergänzungen anzeigen).

    Zweitens: Variablendefinitionen haben normalerweise im Header nichts zu suchen. Das macht nur Probleme, wie du sicher gesehen hast. In den Header gehört eine extern-Deklaration und in die CPP die zugehörige Definition:

    //matrix.h
    #ifndef MATRIX_H
    ...
    struct matrix
    {
      ...
    };
    
    extern matrix vareins,varzwei;
    ...
    #endif
    
    //matrix.cpp
    #include "matrix.h"
    
    matrix vareins =
    {
      {            
        {' ','x','x','x',' '},
        {' ','x','x','x',' '}
      }
    };
    matrix varzwei =
    {
      {
        {' ',' ',' ','x',' '},
        {' ',' ',' ','x',' '}
      }
    };
    
    ...
    

Anmelden zum Antworten