log4cpp - 对于log4cpp :: AppenderSkeleton,不存在默认构造函数

时间:2013-10-24 17:21:38

标签: c++ inheritance logging log4cpp

我最近在我的项目中链接了log4cpp,我尝试了这样一个类:

class ConsoleAppenderSkeleton : public log4cpp::AppenderSkeleton
{
     private:
        Console& console;

     public:
        ConsoleAppenderSkeleton(Console& console) : console(console)
        {
          // Error! no default constructor exists for log4cpp::AppenderSkeleton
        }
}

我尝试了什么

  • 添加另一个构造函数:ConsoleAppenderSkeleton(void);
  • 删除初始化列表

知道可能导致这种情况的原因是什么?我知道我需要实现继承的函数,比如close()但是那些不应该导致这个错误,并且在C ++中你不是强制来覆盖它,它只会表现在一个如果你没有这种奇怪的方式

2 个答案:

答案 0 :(得分:1)

您没有显式调用基类的构造函数,并且它没有空构造函数。它的构造函数需要一个std :: string参数。覆盖类时应注意这一点。

答案 1 :(得分:1)

    class GameConsoleAppender : protected log4cpp::AppenderSkeleton
{
    private:
        Console& console;

    public:
        GameConsoleAppender(const std::string& name, Console& console) : 
            AppenderSkeleton(name),
            console(console)
            {
                std::cout << "Constructor called.";
            }
};

这就是答案。我不得不用字符串继承它的基础构造函数,然后添加我自己的引用。如果其他人有这个问题,只需添加基本的consrtuctor:

AppenderSkeleton :: AppenderSkeleton(const std :: string&amp; name)