3

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

#//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 中。

4

2 回答 2

2

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

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

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

const FunctionParser& GetFunctionParser16() const
{
    return fp16; // return reference to fp16
}
于 2013-05-07T09:56:25.573 回答
0

尝试

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

您不是FunctionParser::FunctionParser(const FunctionParser&)手动调用,但是当您通过value返回它时,需要调用它来构造一个将从 getter 返回的复制对象。
您可能还想为 const 正确性添加一个非常量 getter

FunctionParser& GetFunctionParser1() { return fp1; }
于 2013-05-07T09:49:40.650 回答