chiamando std :: cout.rdbuf () produce errore di sintassi
-
26-09-2019 - |
Domanda
Forse ho perso qualcosa, ma non posso capire perché Visual Studio 2008 non è vedere la procedura rdbuf (). Ecco il mio codice:
16. #include "DebugBuffer/BufferedStringBuf.h"
17.
18. BufferedStringBuf debug_buffer(256);
19. std::cout.rdbuf(&debug_buffer);
La classe BufferedStringBuf è da questa pagina: http: //www.devmaster .net / forum / showthread.php? t = 7037
che produce il seguente errore:
...src\main.cpp(19) : error C2143: syntax error : missing ';' before '.'
Tutto quello che voglio fare è redirect std :: cout alla finestra Output di Visual Studio tramite OutputDebugString () ..
Soluzione
Lei non è permesso avere istruzioni eseguibili a portata a livello di file. È possibile dichiarare le variabili, ma non è possibile richiamare le funzioni come istruzioni standalone. Spostare il codice in una funzione (come del gf risposta dimostra ), e si dovrebbe avere alcun problema.
Altri suggerimenti
Uso della classe esempio dato su quel sito non ho alcun problema:
#include <iostream>
#include "DebugBuffer/BufferedStringBuf.h"
class DbgBuf : public BufferedStringBuf {
public:
DbgBuf() : BufferedStringBuf(255) {}
virtual void writeString(const std::string &str) {}
};
int main()
{
DbgBuf debug_buffer;
std::cout.rdbuf(&debug_buffer);
}
Si noti che si deve creare un'istanza di una classe che deriva da BufferedStringBuf
perché BufferedStringBuf::writeString()
è puro virtuale, rendendo così una classe astratta -. Classi astratte non possono essere istanziati