返回其他类对象的c++类getter中的错误

Error in C++ class getters that return objects of other class

本文关键字:错误 getter c++ 对象 返回 其他      更新时间:2023-10-16

我开始学习c++,我不能解决这个错误。我正试图实现一个名为IModeloDinamico的类,该类具有作为私有成员的另一个名为FunctionParser的类的一些对象,在fparser.h库中实现。我试图实现一些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 GetFunctionParser16() const
{
    return fp16; // return copy of fp16
}

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

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

Try

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

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

添加一个非const getter
FunctionParser& GetFunctionParser1() { return fp1; }