VC6 и наследование от классов стандартных потоков
От: longlivedeath  
Дата: 23.08.03 19:06
Оценка:
Как заставить vc6 компилировать следующее:
//в хедере:

#ifndef HEADER_H
#define HEADER_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <ostream>

namespace kernel
{
  class StreamBuf:public std::streambuf
  {};

  class LogStream: public std::ostream
  {
  public:
    LogStream(std::streambuf * tt = new StreamBuf)
      : std::ostream(tt)
    {}
    
    ~LogStream()
    {delete rdbuf();}
  };

}

#endif // HEADER_H

//в .срр:
#include "header.h"

int main()
{
  //
  kernel::LogStream out;

  out << "Death!";
  return 0;
}

MinGW компилирует, vc6 ругается:
header.h(26) : error C2512: 'basic_ostream<char,class _STL::char_traits<char> >' : no appropriate default constructor available
header.h(26) : error C2614: 'LogStream' : illegal member initialization: 'ostream' is not a base or member
Использую STLPort последний; StreamBuf на самом деле пишет в файл, я порезал для краткости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.