【问题标题】:log4cpp - no default constructor exists for log4cpp::AppenderSkeletonlog4cpp - log4cpp::AppenderSkeleton 不存在默认构造函数
【发布时间】:2013-10-24 17:21:37
【问题描述】:

我最近在我的项目中链接了 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++ 中,您不会强制覆盖,它只会在如果你不这样做会很奇怪

【问题讨论】:

    标签: c++ inheritance logging log4cpp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
          class GameConsoleAppender : protected log4cpp::AppenderSkeleton
      {
          private:
              Console& console;
      
          public:
              GameConsoleAppender(const std::string& name, Console& console) : 
                  AppenderSkeleton(name),
                  console(console)
                  {
                      std::cout << "Constructor called.";
                  }
      };
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多