2013-02-24 49 views
0

我有一段代码,它的方法定义不能访问类中声明私有成员

Move add(const Move & m) { 
    Move temp; 
    temp.x+= (m.x +this-x); 
    temp.y+= (m.y + this->y); 
    return temp; 
} 

,这是类声明

class Move 
{ 
private: 
    double x; 
    double y; 
public: 
    Move(double a=0,double b=0); 
    void showMove() const; 
    Move add(const Move & m) const; 
    void reset(double a=0,double b=0); 
}; 

它说,

1>c:\users\filip\dysk google\c++\consoleapplication9\move.cpp(18): error C2248: 'Move::x' : cannot access private member declared in class 'Move' 
1>   c:\users\filip\dysk google\c++\consoleapplication9\move.h(7) : see declaration of 'Move::x' 
1>   c:\users\filip\dysk google\c++\consoleapplication9\move.h(5) : see declaration of 'Move' 
1>   c:\users\filip\dysk google\c++\consoleapplication9\move.h(7) : see declaration of 'Move::x' 
1>   c:\users\filip\dysk google\c++\consoleapplication9\move.h(5) : see declaration of 'Move' 
1>c:\users\filip\dysk google\c++\consoleapplication9\move.cpp(18): error C2355: 'this' : can only be referenced inside non-static member functions 
1>c:\users\filip\dysk google\c++\consoleapplication9\move.cpp(18): error C2227: left of '->x' must point to class/struct/union/generic type 

Move :: y也一样。 Any1有什么想法?

回答

7

您需要在Move类范围定义add

Move Move::add(const Move & m) const { 
    Move temp; 
    temp.x+= (m.x +this-x); 
    temp.y+= (m.y + this->y); 
    return temp; 
} 

否则它被解释为一个非成员函数,没有获得Move的非公共成员。

注意,您可以简化代码,假设这两个参数的构造函数设置xy

Move Move::add(const Move & m) const { 
    return Move(m.x + this-x, m.y + this->y); 
} 
+1

+1(在等待'const'露面= P) – WhozCraig 2013-02-24 09:39:05

相关问题