2010-04-10 19 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()是純虛類的實例,從而使它成爲一個抽象類 - 抽象類不能被實例化。

相關問題