【问题标题】:C++ Class Delegation Constructor ProblemsC++ 类委托构造函数问题
【发布时间】:2010-12-29 12:34:50
【问题描述】:

感谢您的阅读。 委托类称为 Sensor。它需要在构造函数中设置一个引用,例如:

class Sensor { Sensor(other *ref);}

我有一个类 testFactory。如果我现在输入

class testFactor{ ...stuff... private: Sensor mySensor;}

我得到了所有的问题。它不能分配抽象对象。或者不能声明变量,或者不知道变量的类型。

即使将传感器作为静态变量从标头中取出到 cpp 中也无济于事。

仅当我将传感器构造函数更改为无效/非构造函数时,我不会遇到任何问题。

但是我必须在传感器中使用 setRed 函数,这可能会导致更多问题。

希望您能帮助我:声明一个变量并持有一个具有非 Void 构造函数的类

【问题讨论】:

    标签: c++ constructor delegation


    【解决方案1】:

    您需要正确初始化 Sensor 实例 - 例如:

    class TestFactor {
      public:
       TestFactor() : mySensor( 0 ) {}
      private:
       Sensor mySensor;
    };
    

    【讨论】:

      【解决方案2】:

      使用 c++ 对我来说效果很好。也许你没有在 Fac 的初始化列表中声明 Sensor 的构造?

      class Sensor { 
        public:
        Sensor(int *a)
        {
        }
      };
      
      int b;
      
      class Fac {
        public:
        Fac():
          sensor(&b)
          {}
        private:
          Sensor sensor;
      };
      
      main()
      {
        Fac a;
        return 0;
      }
      

      【讨论】:

        【解决方案3】:

        我可以看到的一件事是 Sensor 的构造函数是私有的(尝试将 class 更改为 struct 或将 public: 放在构造函数之前或声明 Sensor 和包含类之间的友谊)。除了它之外,您还应该有一个默认构造函数,或者在包含类中实例化它时提供参数。

        但您显然需要更具体才能获得更具体的答案。

        【讨论】:

          【解决方案4】:

          如果你有非默认构造函数的类,编译器不会为它生成默认构造函数。您也不能实例化只有私有构造函数的类。

          您可以提供公共默认构造函数、使用指向实例的指针或简单地通过公共构造函数初始化成员:

          class testFactor {
              Sensor mySensor;
          public:
              testFactor() : mySensor(0) {}
          };
          

          【讨论】:

            【解决方案5】:

            还有一点:如果传感器是一个抽象类,你不能创建它的实例。

            大多数工厂模式都有一个抽象基类,基类的返回指针指向分配的派生对象。

            class Sensor
            {
              virtual std::string get_sensor_name(void) const = 0;
            };
            
            class Fire_Sensor
              : public Sensor
            {
              std::string get_sensor_name(void) const
              { return "Fire Sensor";}
            };
            
            
            Sensor *
            Sensor_Factory::create_sensor(std::string name)
            {
              if (name == "Fire Sensor")
              {
                 return new Fire_Sensor;
              }
              return NULL;
            }
            

            同时查找参考切片

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-01-16
              • 1970-01-01
              • 2020-09-02
              • 2012-12-30
              相关资源
              最近更新 更多