【问题标题】:can't set member variable as object reference不能将成员变量设置为对象引用
【发布时间】:2013-12-09 04:38:30
【问题描述】:

在我的班级中,我有一个这样的私人成员:ISymbolFactory& mSymbolFactory;

然后我有一个以 ISymbolFactory& 作为参数的 SetFactory 方法。

如果我想将 mSymbolFactory 设置为另一个对象(实现为 singelton)只能执行一次。如果我想覆盖成员变量,那么它就不会正确。 它会卡在我设置为此变量的 first 对象上。

成员方法调用如下:SetFactory(SomeFactory::GetInstance());

类:

class SymbolParser: public Object {
private:
    ISymbolFactory& mSymbolFactory;
public:
    SymbolParser();
    ~SymbolParser();
    void SetFactory(ISymbolFactory& symbolFactory);
};

我的方法片段:

void SymbolParser::SetupSymbolParser(ISymbolFactory& symbolFactory) {
    mSymbolFactory = symbolFactory;
    .....
}

也许我不得不提到构造函数像这样初始化变量(这是我坚持的对象):

SymbolParser::SymbolParser() : mSymbolFactory(JavaFactory::GetInstance()) {}

【问题讨论】:

  • 您需要从构造中初始化mSymbolFactory,这是从另一个引用中分配它的唯一方法。
  • 类中的对象引用必须分配给类的构造函数中的有效对象
  • 但之后我必须更改它。那么我需要一个指针吗?
  • 如果你以后必须改变它,你需要一个指针是的。
  • @schreda 是的,请看下面我的回答

标签: c++ object reference


【解决方案1】:

如果您希望能够在运行时分配给其他东西,请使用指针而不是引用对象。

这样做:

class SymbolParser: public Object {
private:
    ISymbolFactory* mSymbolFactory;
public:
    SymbolParser();
    ~SymbolParser();
    void SetFactory(ISymbolFactory& symbolFactory);
};

在您的细分市场中:

void SymbolParser::SetupSymbolParser(ISymbolFactory& symbolFactory) {
    mSymbolFactory = &symbolFactory;
    .....
}

【讨论】:

    【解决方案2】:

    符号解析器(符号工厂和符号工厂): mSymbolFactory(symbolFatory) {}

    你可以在构造函数中初始化一个引用

    【讨论】:

      【解决方案3】:

      请改用以下代码:

      class SymbolParser: public Object {
      private:
          ISymbolFactory& mSymbolFactory;
      public:
          SymbolParser(ISymbolFactory& symbolFactory)
          : mSymbolFactory(symbolFactory) {}
          ~SymbolParser();
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-11
        • 1970-01-01
        • 1970-01-01
        • 2020-08-09
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多