Zuweisen einer struct auf eine andere.



  • Hallo,

    ich habe eine Struktur gegeben z.B.:

    typedef struct{
    	std::vector<a_type>		   a;
    	std::string                     str1;
    	std::string			str2;
    } data_type;
    
    typedef struct
    {
       std::string                      EinStr;
       std::vector<c_type>  	EinVector;
    } a_type;
    
    typedef struct{
       char								id[ID_MAX];
       int				    Wert1;
       std::string                      Str3;
       std::string                      Str4;
       std::string                      Str5;
       std::string                      Str6;
       std::vector<ZZ_type>             ZZVector;
       pos_ZZ_type			    posZZ;
       std::vector<pos_ZZ_type>	    ZZ2Vector;
    } c_type;
    
    vector<data_type> 	My_files;
    

    ich möchte jetzt sowas machen...

    data_type My_file =  My_files[0];
    

    Was ist an der Zuweisung falsch?

    Gruß
    Franky



  • FrankTheFox schrieb:

    Was ist an der Zuweisung falsch?

    Was für einen Fehler bekommst du?

    // nb:
    Ein

    typedef struct {
       ...
    } MyType;
    

    ist in C++ nicht nötig.
    Das geht schneller mit

    struct MyClass {
       ...
    };
    


  • Du brauchst in C++ keine Typenneudefinition, dass regelt das struct von Alleine. Auch würde ich den Bezeichner hinter das struct schreiben, finde ich persönlich halt lesbarer. Dann solltest du deine Member const machen und per ctor in der Initialisierungsliste initialisieren.

    Zum Problem:
    Überlade den Zuweiungsoperator doch mal 🙂



  • Kóyaánasqatsi schrieb:

    Zum Problem:
    Überlade den Zuweiungsoperator doch mal 🙂

    Definitiv nicht, es reicht hier wunderbar der automatisch vom Compiler generierte.



  • l'abra d'or schrieb:

    Kóyaánasqatsi schrieb:

    Zum Problem:
    Überlade den Zuweiungsoperator doch mal 🙂

    Definitiv nicht, es reicht hier wunderbar der automatisch vom Compiler generierte.

    Wollte gerade editieren, stimmt. Also bei mir funktioniert es so wunderbar:

    #include <iostream>
    #include <vector>
    
    template <typename VectorType>
    struct data_type // Aussagekräftigere Bezeichner wählen!
    {
    	data_type<VectorType>(const std::vector<VectorType> &Vector,
    						  const std::string &FirstString,
    					      const std::string &SecondString) :
    		m_a(Vector),
    		m_str1(FirstString),
    		m_str2(SecondString) { }
    
        const std::vector<VectorType> m_a; 
        const std::string             m_str1; 
        const std::string             m_str2; 
    }; 
    
    int main()
    {
    	data_type<unsigned int> FirstType(std::vector<unsigned int>::vector(10),
    									  "Erster String-Tanga",
    									  "Zweiter String-Tanga");
    
    	data_type<unsigned int> SndType = FirstType;
    
    	SndType; // Breakpoint
    }
    


  • warum machst du die member const? Kann ich nicht nachvollziehen. gibt es fast nie einen Grund für.



  • otze schrieb:

    warum machst du die member const? Kann ich nicht nachvollziehen. gibt es fast nie einen Grund für.

    Einfach weil man's kann. Kommt natürlich auch darauf an, wofür man es braucht. Sollte klar sein, dass man sie nicht const macht, wenn man die Member einzeln definieren muss.



  • Hi,

    ich bekomme keinen direkten Fehler. Das Programm bleibt stehen! Wenn ich vor der Zuweisung etwas mit printf in die Konsole schreibe, dann sehe ich das. Wenn ich nachher was reinschreibe, dann nicht.

    Ach ja, die Struktur kann ich nicht ändern, da ich sie so nutzen muß.

    Gruß
    Franky



  • FrankTheFox schrieb:

    Ach ja, die Struktur kann ich nicht ändern, da ich sie so nutzen muß.

    Du musst typedef mit std::vector<T> benutzen? o0 Du solltest deinem Arbeitgeber ein starkes Seil und einen wackeligen Stuhl schenken.

    Ansonsten zeig doch mal etwas mehr Code, so ist das eher ein Rätselraten.



  • FrankTheFox schrieb:

    ich bekomme keinen direkten Fehler. Das Programm bleibt stehen! Wenn ich vor der Zuweisung etwas mit printf in die Konsole schreibe, dann sehe ich das. Wenn ich nachher was reinschreibe, dann nicht.

    Dann liegts nicht an der Zuweisung. Wenn du wie du es gezeigt hast keinen op= hast, kann da nichts stehenbleiben bei der Zuweisung. Drei Bitten:

    a) Zeige relevanten Code, d.h. den Code wo die Zuweisung stattfindet, aber auch nicht mehr.
    b) Sei dir bewusst, dass es einen Unterschied zwischen C und C++ gibt. typedef struct ist C und in C++ nicht nötig. printf ist C und in C++ nicht üblich aus diversen Gründen. Dazu gibts die iostreams.
    c) Lies dir den Link in meiner Signatur durch, da gibts wertvolle Tips wie du hier im Forum schneller zu einer zufriedenstellenden Antwort kommst.



  • Hi,

    korrekt! Die blöde Struct ist nicht intialisiert! Man kann das u.a. am vector prüfen ( der enthalten ist ). Ist der empty, dann exisieren keine Daten.

    Der Code ist grßteils (so wie es den Anschein hat C), also die Datei in der dieser Code steht, ist eine cpp. Ja ich weiß Dateiendungen sind geduldig, aber die Elemente der Struct sind std::string ( das ist eher cpp).
    Die typedefs stehen so drin und kann ich nicht ändern. Das Programm scheint eher ein wilder Mix aus C/C++ zu sein. Auch die printf's sind an einigen Stellen so drin.

    Gruß
    Franky


Anmelden zum Antworten