2010-04-10 5 views
0

어쩌면 놓친 것이 있습니다. 그러나 Visual Studio 2008에서 rdbuf() 프로 시저가 보이지 않는 이유를 알 수 없습니다. 여기에 내 코드 :std :: cout.rdbuf()를 호출하면 구문 오류가 발생합니다

BufferedStringBuf 클래스는이 페이지에서입니다
16. #include "DebugBuffer/BufferedStringBuf.h" 
17. 
18. BufferedStringBuf debug_buffer(256); 
19. std::cout.rdbuf(&debug_buffer); 

: http://www.devmaster.net/forums/showthread.php?t=7037

다음과 같은 오류 발생 :

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

내가하고 싶은 모든 표준 리디렉션입니다 :: cout을 OutputDebugString()을 사용하여 Visual Studio 출력 창에 출력하십시오.

+3

당신은 #include 어딘가에 있나요? 또한'BufferedStringBuf :: writeString()'은 순수 가상입니다. 파생 클래스에서 구현하고 인스턴스화해야합니다. –

답변

4

파일 수준 범위에서 실행 가능한 명령문을 사용할 수 없습니다. 변수는 선언 할 수 있지만 함수를 독립형 문으로 호출 할 수는 없습니다. 코드를 함수 (예 : gf's answer)로 옮기면 아무런 문제가 없습니다.

+1

사실, 나는 그것을 완전히 놓쳤다. 스 니펫 읽기 모드 여야합니다. +1 –

+0

Doh! 이게 문제 였어 ... 고마워! – Mikepote

1

해당 사이트에 주어진 예제 클래스를 사용하면 - 추상 클래스를 인스턴스화 할 수없는 당신이 BufferedStringBuf::writeString() 가상 순수하기 때문에 BufferedStringBuf에서 파생되는 클래스의 인스턴스를 만들 필요가

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

참고, 따라서 그것을 추상 클래스를 만들기 : 어떤 문제가 없습니다.

관련 문제