【问题标题】:Error in C++ class getters that return objects of other class返回其他类对象的 C++ 类 getter 中的错误
【发布时间】:2013-05-01 05:28:04
【问题描述】:

我开始学习 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 中。

【问题讨论】:

  • 也许你应该通过引用返回它们
  • 您的帖子非常难以阅读。注意你提问的方式,因为它会影响答案的质量。这次我为你编辑了问题,下次请你自己做。
  • 谢谢幽灵。这是我的第一条消息,我迷路了!!!!下次我会以正确的方式做。!!!谢谢。

标签: c++ class object return getter


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    试试

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

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

    FunctionParser& GetFunctionParser1() { return fp1; }
    

    【讨论】:

    • const FunctionParser& GetFunctionParser1(){return fp1;};
    • 出了什么问题?你能用几句话给我解释一下吗?我不想让你浪费时间。谢谢你的帮助!!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多