无法将成员变量设置为对象引用

时间:2013-11-24 15:38:11

标签: c++ object reference

在我班上我有一个这样的私人会员:ISymbolFactory& mSymbolFactory;

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

如果我想将mSymbolFactory设置为另一个对象(实现为 singelton ),则只能执行此操作一次。如果我想覆盖membervariable,那么它就不会正确。 它将停留在我设置为此变量的第一个对象上。

成员方法的调用如下: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()) {}

3 个答案:

答案 0 :(得分:2)

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

这样做:

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

在您的细分中:

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

答案 1 :(得分:0)

  

Symbolparser(Symbolfactory& symbolFactory):   mSymbolFactory(symbolFatory){}

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

答案 2 :(得分:0)

请改用以下代码:

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