Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Struct initialisieren funktioniert nicht

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.07.2008
    Beiträge
    9

    Struct initialisieren funktioniert nicht

    Hallo,

    ich versuche gerade ein in C existierendes Konsolenprogramm mit Qt grafisch umzusetzen.

    Dabei entsteht folgende Fehlermeldung:

    main.cpp:15: error: two or more data types in declaration of `SimpleLightType'
    main.cpp:15: error: `SimpleLightType' must be initialized by constructor, not by
    `{...}'

    Dazu muss ich sagen, dass die Zeilen, in denen das struct initialisiert wird, 1:1 aus dem C-Programm übernommen worden sind.


    Gibt es irgendwelche Einstellungen, die ich am Compiler oder im Makefile ändern muss? Oder wie kann ich das struct alternativ initialisieren? (Da die Definition in einer Api-include-Datei ist, kann ich keinen Konstruktor dazu schreiben)

    Viele Grüße,
    Karl Eichenmüller

  2. #2
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von Geige123 Beitrag anzeigen
    Oder wie kann ich das struct alternativ initialisieren? (Da die Definition in einer Api-include-Datei ist, kann ich keinen Konstruktor dazu schreiben)
    Wenn es wirklich keinen Konstruktor gibt, dann bleibt dir nur die Möglichkeit, jedem Feld einzeln einen Wert zuzuweisen:
    Code:
    SimpleLightType variable;
    variable.dies = 1;
    variable.das = 2;
    ...

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Ich versuche gerade ein in C existierendes Konsolenprogramm mit Qt grafisch umzusetzen.

    Dabei entsteht folgende Fehlermeldung:

    main.cpp:15: error: two or more data types in declaration of `SimpleLightType'
    main.cpp:15: error: `SimpleLightType' must be initialized by constructor, not by
    `{...}'

    Dazu muss ich sagen, dass die Zeilen, in denen das struct initialisiert wird, 1:1 aus dem C-Programm übernommen worden sind.
    Kannst du dazu mehr Quelltext posten? Die Umstände der Fehlermeldung kommen mir seltsam vor. Die Strukturen die du in C mit der { ... } Syntax initialisieren kannst, müssten nämlich auch eigentlich in C++ damit initialisierbar sein. Es könnte also sein, dass wo anders noch etwas faul ist - oder das ich irgendeine Regel, die bei deinem Quelltext wichtig ist, nicht kenne.

  4. #4
    Registrierter Benutzer
    Registriert seit
    11.07.2008
    Beiträge
    9
    In main.cpp steht folgendes:
    Code:
    #define TRAINING_NS "http://www.schneider-electric.com/DPWS/2006/03/Training"
    
    struct qname SimpleLightType = {TRAINING_NS, "SimpleLight"};
    Und in der Include-Datei steht:
    Code:
    struct qname
    {
    	char * ns;	/**< Namespace. */
    	char * lname;	/**< Local name. */
    };
    Und hier nochmals die Fehlermeldung des Compilers:
    Code:
    main.cpp:15: error: two or more data types in declaration of `SimpleLightType'
    main.cpp:15: error: `SimpleLightType' must be initialized by constructor, not by
     `{...}'
    Woran kann es liegen?

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Also der Codeschnipsel unten kompiliert bei mir mit einer ziemlich neuen Gcc Version (4.3.x) und wird auch von Comeau online kompiliert. Ich kenne auch keine Regel in C++ die den Schnipsel verbietet.

    Code:
    struct qname
    {
            char * ns;      /**< Namespace. */
            char * lname;   /**< Local name. */
    };
    
    #define TRAINING_NS "http://www.schneider-electric.com/DPWS/2006/03/Training"
    
    struct qname SimpleLightType = {TRAINING_NS, "SimpleLight"};

  6. #6
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    05.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Wenn es Probleme beim Mischen von C und C++ gibt dann gib doch den C part unter extern "C" { ... }.
    Code:
    extern "C" {
            struct qname
            {
                    char * ns;      /**< Namespace. */
                    char * lname;   /**< Local name. */
            };
    }
    
    #define TRAINING_NS "http://www.schneider-electric.com/DPWS/2006/03/Training"
    
    extern "C" struct qname SimpleLightType = {TRAINING_NS, "SimpleLight"};
    Ist jetzt aber nicht getestet. Hoff die Syntax ist so korrekt.

    Wenn du die .c Datein eh mit gcc kompelierst aber die .h Datein in .cpp Source einbindest, dann schreib deine C Header am besten so:
    Code:
    #ifndef MY_HEADER_H__
    #define MY_HEADER_H__
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    /* your c stuff goes here... */
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif /* MY_HEADER_H__ */
    Siehe auch: http://wwwhome.math.utwente.nl/~bell...c-and-cpp.html
    Geändert von panzi (13-07-2008 um 13:17 Uhr)
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  7. #7
    Registrierter Benutzer
    Registriert seit
    11.07.2008
    Beiträge
    9
    Danke für die vielen Ratschläge.

    Ich habe die Lösung dieses Problems gefunden:

    In einer eingebundenen Header-Datei fehlte bei eine Klassendefinition das abschließende Semikolon.

    Code:
    class xyz
    {
    ...
    };
    Gruß,
    Geige123

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •