Wie verwende ich eine Klasse wstringstream variable?
Ich habe eine std::wstringstream
dass ich als eine Art Puffer, in meiner Klasse, und es wird verwendet, indem ein guter Teil der Methoden in dieser Klasse. Jedoch, wenn ich versuche, so etwas zu tun:
#include <sstream>
class foo
{
public:
void methodA(int x, int y); //Uses mBufferStream
void methodB(int x, int y); //Uses mBufferStream
private:
std::wstringstream mBufferStream;
};
Bekomme ich die folgende Fehlermeldung:
error C2248: "std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
Dies ist nicht meine genaue Klasse offensichtlich, aber es ist das gleiche setup. Irgendwelche Gedanken, was ich vielleicht falsch mache? Ich bin mit Microsoft Visual Studio 2005.
[Bearbeiten] angezeigt wird, wählen Sie in der Methode Körper .cpp-Datei (als ein Beispiel von der Verwendung):
void foo::methodA(int x, int y)
{
mBufferStream << "From " << x << " To " << y;
externalfunction(mBufferStream.str()); //Prints to message service
mBufferStream.str(L"");
}
- Dein code kompiliert problemlos auf g++ 4.2 - funktioniert diese genauen code nicht kompilieren auf, deinen compiler? Es sieht gut aus.
- Irgendein Beispiel, wie Ihr mit mBufferStream im Körper?
- welche dieser drei Zeilen, die den Fehler verursacht?
- Hrm, Wenn ich das wstringstream in der Klasse, in der die Protokollierung von Nachrichten, der Fehler geht Weg. Ich Frage mich, was würde diesen Fehler verursachen...
- Wir müssen sehen, was der echte code, um Ihnen den richtigen Antworten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, weil der compiler implizit Deklaration eines copy-Konstruktor für die Klasse
foo
.std::wstringstream
ist noncopyable, weil es erbt vonios_base
.Ändern Sie Ihre Klasse zu diesem:
und sollte der compiler Punkt, den Sie an die Täter.
Vorausgesetzt, die fehlende
;
auf dieexternalfunction
Zeile ist ein Tippfehler, ich war nicht in der Lage, Ihre genaue Fehlermeldung, aber es sieht aus wie vielleichtexternalfunction
erwartet einestd::string
als parameter. In der TatmBufferStream.str()
bietet einestd::wstring
kann nicht implizit konvertiert werden.