静态成员函数无法访问类的受保护成员
Posted
技术标签:
【中文标题】静态成员函数无法访问类的受保护成员【英文标题】:Static member function cannot access protected member of class 【发布时间】:2013-11-30 04:52:14 【问题描述】:我的理解是静态成员函数可以访问类的私有的、受保护的成员。 在我的代码中,sortPoint2DXAsc 应该能够访问 X 和 Y,因为它是 Point2D 的成员函数。但我得到这个错误:
Point2D.h: In function ‘bool sortPoint2DXAsc(const Point2D&, const Point2D&)’:
Point2D.h:22:7: error: ‘int Point2D::x’ is protected
Point2D.cpp:41:21: error: within this context
Point2D.h:22:7: error: ‘int Point2D::x’ is protected
Point2D.cpp:41:31: error: within this context
Point2D.h:22:7: error: ‘int Point2D::x’ is protected
Point2D.cpp:41:44: error: within this context
Point2D.h:22:7: error: ‘int Point2D::x’ is protected
Point2D.cpp:41:55: error: within this context
Point2D.h:23:7: error: ‘int Point2D::y’ is protected
Point2D.cpp:41:67: error: within this context
Point2D.h:23:7: error: ‘int Point2D::y’ is protected
Point2D.cpp:41:77: error: within this context
这是我的代码:
class Point2D
protected:
int x;
int y;
public:
//Constructor
Point2D();
Point2D (int x, int y);
//Accessors
int getX();
int getY();
//Mutators
void setX (int x);
void setY (int y);
static bool sortPoint2DXAsc (const Point2D& left, const Point2D& right);
;
bool sortPoint2DXAsc (const Point2D& left, const Point2D& right)
return (left.x < right.x) || ((left.x == right.x) && (left.y < right.y));
【问题讨论】:
该函数不是类的一部分。改为bool Point2D::sortPoint2DXAsc...
哇,感谢您指出这一点。不知道我是怎么错过的。
【参考方案1】:
我想你想要this code tested 之类的东西:
class Point2D
protected:
int x;
int y;
public:
//Constructor
Point2D();
Point2D (int x, int y);
//Accessors
int getX() const return x;
int getY() const return y;
//Mutators
void setX (int x) /*Do something with x*/
void setY (int y) /*Do something with y*/
static bool sortPoint2DXAsc(const Point2D& left, const Point2D& right);
;
bool Point2D::sortPoint2DXAsc (const Point2D& left, const Point2D& right)
return (left.getX() < right.getX()) || ((left.getX() == right.getX()) && (left.getY() < right.getY()));
您可以使用静态,因为您没有在函数中使用this
。例如,如果您使用 this->x
而不是 left.getX()
,您会收到错误消息,因为您的函数是静态的。
现在,这是一个second example,您可以在其中访问x
和y
,而无需访问器。
由于您在您的类定义中,x
和 y
可以从 left
和 right
访问,它们是 Point2D
的实例,即使它们受到保护。
【讨论】:
以上是关于静态成员函数无法访问类的受保护成员的主要内容,如果未能解决你的问题,请参考以下文章