为什么这个错误?"没有合适的默认构造函数"

Mic*_*ick 3 c++

有人给了我以下C++代码片段来尝试 - 现在我已经失去了与他们的联系(这是一个很长的故事).无论如何,它不会编译 - 我得到一个错误

错误C2512:'mstream':没有合适的默认构造函数可用

任何人都可以解释为什么,以及解决它需要什么.

class mstream : private ostream
{
  public:

  mstream& operator << (char *value)
  {
    printf ("[%s]\n", value);
    return *this;
  }
  mstream& operator << (int value)
  {
    printf ("[%u]\n", value);
    return *this;
  }

};
mstream g_mcout;
Run Code Online (Sandbox Code Playgroud)

编辑:哎呀,错过了这个......

ostream& mcout ()
{
  return g_mcout;
}
ostream& SgDebug ()
{
  return g_mcout;
}
Run Code Online (Sandbox Code Playgroud)

仅供参考:这个奇怪的代码的原因与将C++与C程序合并有关.printf()实际上将被更改为my_printf(),它可以执行各种自定义操作.

GMa*_*ckG 6

ostream没有默认构造函数; 隐式创建的默认构造函数因此而mstream无效.您需要提供ostream一个流缓冲区:

class mstream : private ostream
{
public:
    mstream() :
    ostream(/* whatever you want */)
    {}

    /* Maybe this is more appropriate:

    mstream(std::streambuf* pBuffer) :
    ostream(pBuffer)
    {}

    */

    // ...
};
Run Code Online (Sandbox Code Playgroud)

所以它可以构建.你放在那里取决于你想要做什么.