Ausgabe allgemein halten



  • Hallo allerseits,
    ich habe eine Serverklasse, der ich im Konstruktor einen std::ostream übergeben möchte, so dass verschiedene Logmöglichkeiten existieren und der Server später evtl. sehr einfach in ein graphisches Interface integriert werden kann. Nun wollte ich das ganze testen, es gibt aber einen Fehler. Hier mal der Testcode:

    #include "stdafx.h"
    #include <windows.h>
    #include <Winuser.h>
    #include <string>
    #include <iostream>
    
    void test(std::ostream x, const std::string message)
    {
    	x<<message;
    }
    
    int main()
    {
    	test(std::cout, "hallo");	    
    }
    

    Die Fehlermeldung lautet:

    error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
    

    Ich greife also irgendwie auf eine private-Variable zu. Wie kann ich das Problem lösen?



  • void test(std::ostream& x, const std::string& message) 
    { 
        x<<message; 
    }
    

    So sollts gehen (ungetestet).



  • simon.gysi schrieb:

    void test(std::ostream& x, const std::string& message) 
    { 
        x<<message; 
    }
    

    So sollts gehen (ungetestet).

    Funktioniert bestens, danke. Jetzt müsste ich nur noch wissen, warum der call by value nicht funktioniert?



  • Ich denke mal, dass ostreams etc. noncopyable sind.


Anmelden zum Antworten