2010-04-10 14 views
0

Peut-être que j'ai manqué quelque chose, mais je n'arrive pas à comprendre pourquoi Visual Studio 2008 ne voit pas la procédure rdbuf(). Voici mon code:appelant std :: cout.rdbuf() produit une erreur de syntaxe

16. #include "DebugBuffer/BufferedStringBuf.h" 
17. 
18. BufferedStringBuf debug_buffer(256); 
19. std::cout.rdbuf(&debug_buffer); 

La classe BufferedStringBuf est de cette page: http://www.devmaster.net/forums/showthread.php?t=7037

qui produit l'erreur suivante:

...src\main.cpp(19) : error C2143: syntax error : missing ';' before '.'

Tout ce que je veux faire est de rediriger std :: cout à la fenêtre Visual Studio Output à l'aide de OutputDebugString().

+3

Avez-vous '#include ' quelque part? BufferedStringBuf :: writeString() 'est également virtuel - vous devez l'implémenter dans une classe dérivée et l'instancier. –

Répondre

4

Vous n'êtes pas autorisé à avoir des instructions exécutables au niveau du fichier. Vous pouvez déclarer des variables, mais vous ne pouvez pas appeler des fonctions comme des instructions autonomes. Déplacez votre code dans une fonction (comme gf's answer démontre), et vous ne devriez avoir aucun problème.

+1

En effet, j'ai complètement raté ça. Doit être le mode de lecture d'extraits. +1 –

+0

Doh! c'était le problème ... Merci! – Mikepote

1

En utilisant la classe exemple donnée sur ce site, je fais pas de problème:

#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); 
} 

Notez que vous devez créer une instance d'une classe qui dérive de BufferedStringBuf parce BufferedStringBuf::writeString() est virtuelle pure, rendant ainsi une classe abstraite - les classes abstraites ne peuvent être instanciés.