hap broblem!



  • Hi!
    Ich habe zwei Namespaces:

    namespace A
    {
        string s1 = "brause";
        string get_s1()
        {
            return s1;
        }
    }
    
    namespace B
    {
        string s2 = "brummer";
        string get_s2()
        {
            return s2;
        }
    }
    

    und will mit mit den verketteten strings ein Objekt Erzeugen:

    MyObject myobject ( A::get_s1() + B::get_s2() );
    

    Die Deklaration des Konstruktors von MyObjects sieht so aus:

    MyObject::MyObject ( const string& s );
    

    Mein Problem:
    Es kommt bloß "brause" an, aber "brummer" kommt nicht im Konstruktor an.
    Wieso nicht 😕



  • mehr code. jetzt.



  • Grad gecheckt, das krasse ist, außerhalb von main() funztnich, innerhalb funzt 😕

    myobject_a ( A::get_s1() + B::get_s2() ); // kommt nur "brause" an!
    
    int main()
    {
        MyObject myobject_b ( A::get_s1() + B::get_s2() ); // ok is!
    }
    


  • KORREKTUR

    MyObject myobject_a ( A::get_s1() + B::get_s2() ); // kommt nur "brause" an!
    
    int main()
    {
        MyObject myobject_b ( A::get_s1() + B::get_s2() ); // ok is!
    }
    

    Sorry wegen Klasse vergessen, Problem ist aber klar, ne.



  • Vielleicht sollte ich noch erwähnen, das namespace A, namespace B in zwei verschiedenen Dateien sind und die Erzeugung des Objektes in einer dritten Datei stattfindet.

    MfG



  • Die Erstellungsreihenfolge globaler Objekte über Übersetzungseinheitsgrenzen hinweg ist nicht definiert. Vermutlich gibt es den zweiten String zum Zeitpunkt des Konstruktoraufrufs von MyObject einfach noch nicht.

    namespace A
    {
        string get_s1()
        {
            return "brause";
        }
    }
    
    namespace B
    {
        string get_s2()
        {
            return "brummer";
        }
    }
    

    Funktioniert es so?



  • Ja, so funktioniert es! Das mit der Reihenfolge wusste ich noch nicht, vielen Dank!
    Gruß,
    p.


Anmelden zum Antworten