返回其他类对象的C ++类getter出错

时间:2013-05-07 09:47:43

标签: c++ class object return getter

我开始学习C ++,但我无法解决这个错误。 我正在尝试实现一个名为IModeloDinamico的类,该类具有私有成员,在fparser.h库中实现了另一个名为FunctionParser的类的对象。 我试图实现一些getter但我有一些错误返回另一个类的对象。这是代码。

#//Some includes
#include "fparser.h"

class IModeloDinamico 
{
private:
    //Some string and double variables.

    //FunctionParser variables are objects from fparser library.

    FunctionParser fp1;

    //...

    FunctionParser fp16;

public:

    // Constructor
    IModeloDinamico();

    //Destructor
    ~IModeloDinamico();

    //Accesors

    //Getters

    //Some getters for string and double vars.
    //And getters for return objects of fparser library. **Where i have the errors.**

    FunctionParser GetFunctionParser1() const 
    {
        return fp1;
    };

FunctionParser GetFunctionParser2() const
    {
        return fp2;
    };

// ...

FunctionParser GetFunctionParser16() const
    {
        return fp16;
    };

    //Setters/

    // ...

    //Some methods..
};

错误消息显示:

‘FunctionParser::FunctionParser(const FunctionParser&)’ is private.

此方法在fparser库中实现,并声明为该类的私有成员,但我没有调用该方法来返回该对象。

其他错误是:

'within this context'

在FunctionParser的每个getter中。

2 个答案:

答案 0 :(得分:2)

私有方法是复制构造函数,并且您正在调用该方法,因为您的方法返回解析器对象的副本

FunctionParser GetFunctionParser16() const
{
    return fp16; // return copy of fp16
}

复制构造函数是私有的这一事实表明此类的编写者不希望复制这些对象。所以你应该通过引用返回

const FunctionParser& GetFunctionParser16() const
{
    return fp16; // return reference to fp16
}

答案 1 :(得分:1)

尝试

const FunctionParser& GetFunctionParser1() const { return fp1; }

您没有手动调用FunctionParser::FunctionParser(const FunctionParser&),但是当您通过 value 返回时,需要调用它来构建副本对象从你的吸气者返回。
您可能还想为const-correctness添加非const getter

FunctionParser& GetFunctionParser1() { return fp1; }