【问题标题】:how to return multiple values of struct from get function in c++?如何从 C++ 中的 get 函数返回多个结构值?
【发布时间】:2020-07-09 19:31:47
【问题描述】:

我在课堂上创建了一个结构数据成员。现在,我想使用 get 函数返回该结构的值,但它会产生错误。我不确定getcenter() 函数的数据类型应该是什么,主体应该是什么。

#include <iostream>
using namespace std;

class circle
{
    private:
        struct center
        { 
            int xcord;
            int ycord;
        };
        center cordinate;
        float radius;
    public:
        circle()//:circle(0,0,0)
        {
            cordinate.xcord=0;
            cordinate.ycord=0;
            radius=0;
        };

        circle(int x, int y, float r) : cordinate{x,y}, radius(r)
        {};

        center getcenter()  
        {
            return cordinate{xcord,ycord};
        }

        float getradius()
        {
            return radius;
        }

        void setcenter(int xaxis, int yaxis)
        {
            cordinate.xcord=xaxis;
            cordinate.ycord=yaxis;
        }

        void setradius(float rad)
        {
            radius=rad;
        }

        void showdata()
        {
            cout<<"Center(x,y) = ("<<cordinate.xcord<<","<<cordinate.ycord<<")"<<endl;
            cout<<"Radius = "<<radius<<endl;
        }
};

int main()
{
    circle c1;
    c1.setcenter(3,4);
    c1.setradius(5.4);
    cout<<c1.getcenter()<<endl;
    cout<<c1.getradius()<<endl;
}

如何编写getcenter() 函数?

它给了我这些错误:

错误 C2065 'xcord':未声明的标识符 错误 C2065 'ycord':未声明的标识符 错误 C2679 二进制“

【问题讨论】:

  • 代码有什么问题?如果它没有编译,则显示错误消息。
  • 但它正在生成错误 什么错误?请在问题中发布。
  • 从逻辑上讲,您的struct 看起来应该命名为coordinate,而不是center,并且center 应该命名为coordinate。换句话说,圆心是坐标的一个实例。
  • return cordinate{xcord,ycord;}; -- 解释你想用这行代码完成什么。
  • 由于struct center 在您的班级中被声明为private,我认为班级之外的任何东西都不能引用它。

标签: c++


【解决方案1】:

只是

    center getcenter()  
    {
        return cordinate;
    }

cordinate 持有你要返回的值,所以直接返回,和其他变量没有区别。

虽然会更好

    center getcenter() const
    {
        return cordinate;
    }

如果一个方法不修改一个对象,它应该被声明为const

顺便说一句,您的命名似乎全错了。当然结构应该被称为coordinate,而变量应该被称为center,而不是相反。

【讨论】:

  • 但是您没有解决main 中的错误——center 结构没有定义operator &lt;&lt;
【解决方案2】:
return cordinate{xcord,ycord;};

应该是:

return coordinate;

最重要的是,当您解决该问题时,您还会遇到其他几个错误。在您自己声明一个对象之前,您不能将operator&lt;&lt;center 对象一起使用。示例:

struct center
{ 
    int xcord;
    int ycord;

    friend std::ostream &operator<<( std::ostream &os, const center &c ) {
        os << c.xcord << ' ' << c.ycord;
        return os;
    }
};

其次,您的 center 结构是私有的,它可能不应该是私有的(尽管最后一个实际上不会导致错误)。

【讨论】:

    【解决方案3】:

    这是编译的更正代码。您的&lt;&lt; 运算符有许多错误,这些错误未针对circle 类实现。
    您可以编写一个toString() 方法(它可以很好地打印一个圆圈是什么)或覆盖circle 类的&lt;&lt; 运算符。

    #include <iostream>
    using namespace std;
    
    class circle
    {
        private:
            struct center
            { 
                int xcord;
                int ycord;
            };
            center cordinate;
            float radius;
        public:
            circle()
            {
                cordinate.xcord=0;
                cordinate.ycord=0;
                radius=0;
            };
    
            circle(int x, int y, float r){
                center c;
                c.xcord = x;
                c.ycord = y;
                this->cordinate = c;
                this->radius = r;
            }
    
            center getcenter()  
            {
                return cordinate;
            }
    
            float getradius()
            {
                return radius;
            }
    
            void setcenter(int xaxis, int yaxis)
            {
                cordinate.xcord=xaxis;
                cordinate.ycord=yaxis;
            }
    
            void setradius(float rad)
            {
                radius=rad;
            }
    
            void showdata()
            {
                cout<<"Center(x,y) = ("<<cordinate.xcord<<","<<cordinate.ycord<<")"<<endl;
                cout<<"Radius = "<<radius<<endl;
            }
    };
    
    int main()
    {
        circle c1;
        c1.setcenter(3,4);
        c1.setradius(5.4);
        cout<< "Coordinates: " << c1.getcenter().xcord << "\t" << c1.getcenter().ycord <<endl;
        cout<<c1.getradius()<<endl;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-12
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多