【问题标题】:error C2248: 'point::x': cannot access private member declared in class 'point'错误 C2248:“point::x”:无法访问在类“point”中声明的私有成员
【发布时间】:2022-01-03 21:36:51
【问题描述】:

使用此代码:

#include <iostream>
using namespace std;

class point{    
public:
double get_x();
void  set_x(double v);

double get_y();
void  set_y(double z);

private:
double x, y;
};

point operator+(point& p1, point& p2)
{   
 point sum = {p1.x};// + p2.x, p1.y + p2.y};
 return sum;
}

int main()
{
 point a = {3.5,2.5}, b = {2.5,4.5}, c;
}

我收到以下编译器错误,提示无法访问私有成员:

point.cpp(22): 错误 C2248: 'point::x': 无法访问在类 'point' 中声明的私有成员 point.cpp(17): 注意:见 'point::x' 的声明 point.cpp(8): 注意:见'point'的声明

我对 C++ 很陌生,似乎不知道如何解决这个问题。非常感谢任何帮助。

【问题讨论】:

标签: c++ class


【解决方案1】:

您将 xy 声明为私有,因此除非您将该函数设为该类的朋友,否则它们无法在该函数(或类外部)中访问,但如果您想重载 + 运算符,你应该在课堂上做,像这样:

class point
{
public:
    point(double x, double y) // CONSTRUCTOR
        :x(x), y(y)
    {

    }
    double get_x() const{
        return x;
    };
    void set_x(double v)
    {
        x = v;
    };

    double get_y() const{
        return y;
    };
    void set_y(double z)
    {
        y = z;
    };

    point operator+(const point &obj)
    {
        double newX = this->x + obj.get_x();
        double newY = this->y + obj.get_y();

        point sum{newX, newY};
        return sum;
    };
private:
    double x, y;
};

【讨论】:

  • 自从我使用原始 C++ 以来已经有一段时间了,所以我可能在某些事情上错了
  • 我唯一的建议是制作 get_x()get_y() const 成员函数,使 operator+ 成为 const 成员函数,并更改 operator+ 以将其参数作为const 参考。
  • @PeteBecker 我理解关于使operator+ const 引用的论点的部分,但我为什么要让 get_x 和 y const
  • 它们应该是const,因为它们不会修改应用它们的对象,因此可以在const 的对象上调用它们。正如目前所写的那样,const post p; p.get_x(); 是不合法的。如果 get_x()const 没关系。如果您将参数设为 operator+ const 但不将这些成员函数设为 const,则您无法在该参数上调用它们。
猜你喜欢
  • 2014-01-10
  • 2012-11-15
  • 2016-12-02
  • 1970-01-01
  • 2013-07-28
  • 2011-09-06
  • 2015-03-25
  • 1970-01-01
相关资源
最近更新 更多