ostream& und operator= : Kein Zugriff auf den Pfad für private Member ...



  • hi,

    ich kann leider einer Referenz auf ostream nur einmal einen Wert zuweißen, beim 2. mal kommt ein Fehler.

    Bsp.:

    #include <iostream>
    #include <fstream>
    
    int main(void)
    {
    	std::ostream& OUTPUT = std::cout;
    	OUTPUT = std::ofstream("bla.txt");  //ohne die Zeile funktionierts
    
    	OUTPUT << "ausgabe";
    
    	return 0;
    }
    

    Fehler:

    Fehler	1	error C2249: "std::basic_ios<_Elem,_Traits>::operator =": Kein Zugriff auf den Pfad für private Member, dessen Deklaration in der virtuellen Basisklasse "std::basic_ios<_Elem,_Traits>" erfolgte	c:\program files (x86)\microsoft visual studio 9.0\vc\include\ostream	584	cpp_test
    

    was stimmt da nicht? Oder ist das so beabsichtigt?
    Mit Pointern wirds zwar gehen, aber Referenzen wären mir hier lieber (muss ich nicht alles wieder ändern ...)

    mfg



  • Oder ist das so beabsichtigt?

    Ja, es ist beabsichtigt!



  • Und was fürn Sinn hat diese Einschrenkung?
    Referenzen dürfen ja neu zugewiesen werden, und die Fehlermeldung lässt ja auch drauf schließen dasses an ostream liegt.
    Bleibt mir nur das WOrkaround über Pointer?



  • leb0rtran schrieb:

    Referenzen dürfen ja neu zugewiesen werden

    In Java vielleicht..



  • leb0rtran schrieb:

    Referenzen dürfen ja neu zugewiesen werden.

    nein, einer Reference kann nur 1x etw. zugewiesen werden.
    ---> D.h.: Referencen sind von Haus aus immer konstant.

    #include <iostream>
    int main()
    {
        int i = 7;
        int& ref = i; // Reference wird i zugewiesen
        ref = 123;    // i wird 123 zugewiesen und nicht ref.
    
        system("pause>nul");
        return 0;
    }
    


  • leb0rtran schrieb:

    Bleibt mir nur das WOrkaround über Pointer?

    Wieso "Workaround"? Was stört dich an Zeigern?



  • Dweb schrieb:

    nein, einer Reference kann nur 1x etw. zugewiesen werden.
    ---> D.h.: Referencen sind von Haus aus immer konstant.

    Oh, war wohl n denkfehler von mir, dann gibt das ja alles wieder sinn xD

    Nexus schrieb:

    Wieso "Workaround"? Was stört dich an Zeigern?

    leb0rtran schrieb:

    Mit Pointern wirds zwar gehen, aber Referenzen wären mir hier lieber (muss ich nicht alles wieder ändern ...)


Anmelden zum Antworten