调用std :: cout.rdbuf()会产生语法错误

时间:2010-04-10 16:00:09

标签: c++ cout outputdebugstring

也许我错过了什么,但我无法弄清楚为什么Visual Studio 2008没有看到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 '.'

我想要做的就是使用OutputDebugString()将std :: cout重定向到Visual Studio Output窗口。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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()是纯虚拟的,因此使其成为抽象类 - 无法实例化抽象类。