вызов std :: cout.rdbuf () приводит к синтаксической ошибке - PullRequest
0 голосов
/ 10 апреля 2010

Возможно, я что-то пропустил, но не могу понять, почему 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 '.'

Все, что я хочу сделать, это перенаправить std :: cout в окно вывода Visual Studio с помощью OutputDebugString () ..

Ответы [ 2 ]

4 голосов
/ 10 апреля 2010

Вы не можете иметь исполняемые операторы на уровне файлов. Вы можете объявлять переменные, но не можете вызывать функции как отдельные операторы. Переместите ваш код в функцию (такую ​​как gf's answer демонстрирует), и у вас не должно возникнуть проблем.

1 голос
/ 10 апреля 2010

Используя пример класса, приведенный на этом сайте, у меня нет проблем:

#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() является чисто виртуальным, что делает его абстрактным классом - экземпляры абстрактных классов не могут быть созданы.

...