2010-04-10 72 views
0

也许我错过了一些东西,但我不知道为什么Visual Studio 2008没有看到rdbuf()过程。这里是我的代码:调用std :: cout.rdbuf()会产生语法错误

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

的BufferedStringBuf类是从这个页面:http://www.devmaster.net/forums/showthread.php?t=7037

将会产生以下错误:

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

所有我想要做的是重定向的std ::输出到Visual Studio输出窗口使用OutputDebugString()..

+3

你是否在某处?#include ? 'BufferedStringBuf :: writeString()'是纯虚拟的 - 你必须在派生类中实现它并实例化它。 – 2010-04-10 16:13:05

回答

4

您不允许在文件级作用域拥有可执行语句。您可以声明变量,但不能将函数作为独立语句调用。将代码移入一个函数(例如gf's answer演示),并且您应该没有问题。

+1

的确,我完全错过了这一点。必须是片段阅读模式。 +1 – 2010-04-10 17:10:39

+0

Doh!这是问题...谢谢! – Mikepote 2010-04-11 17:26:56

1

使用在该网站上给出的示例类我做不会有任何问题:

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

请注意,您必须创建一个从BufferedStringBuf派生因为BufferedStringBuf::writeString()是纯虚类的实例,从而使它成为一个抽象类 - 抽象类不能被实例化。