2009-09-30 4 views
-3

정적 개인 멤버 함수? 내가 의도했던대로접근 클래스 객체 유형 C++

class Y 
{ 
.. 
private: 
    friend class X; 
    X *myX; 
}; 
class X 
{ 
public: 
     friend class Y; 
private: 
    static int foo(const char * const key); 
    Y *myX; 
}; 


int X::foo(const char * const key) 
{ 
    X *myX = NULL; // illegal. 
} 

정적 캐스트와 정적 캐스트 참조가 작동하지 않습니다를 선언했다.

+1

코드를 읽을 수있는 형식으로 포맷해야합니다. – sth

+0

... 다른 질문에 대한 답변을 수락하십시오. –

+0

은 이러한 작업을 수행하는 데 10 분이 소요됩니까? =/ – user40120

답변

1

maxSize이 X 클래스의 정상적인 구성원이면 그 방법으로 액세스 할 수 없습니다. 함수에 다른 매개 변수로 전달해야합니다.

maxSize이 클래스의 정적 멤버 인 경우 해당 코드가 작동해야합니다.

질문에 답하지 않은 경우 질문을 명확히하고 문제가있는 것을 보여주는 코드를 추가해야합니다.


편집 : 새로운 예에서

, 선은 실제로 당신이 그것을 쓴 방법을 컴파일 할 것 "불법"으로 표시.

(. 그것은 단지 그 함수 내부에 존재하는 myX라는 로컬 X 포인터를 선언하는 것)하지만 난 당신이 실제로 의미 같은데요 :

int X::foo(const char * const key) 
{ 
    myX = NULL; 
} 

을 그리고 myX는 정적 변수가 아니기 때문에 그 실패합니다. 정적 함수는 일반 멤버 변수에 액세스 할 수 없습니다. 정적 변수에만 액세스 할 수 있습니다.

당신은 당신의 디자인을 수정해야합니다 : 그것은 당신의 프로그램에 적합한 지

  • 하나가 myXX의 정적 멤버를합니다.
  • 또는 X::foo을 비 정적 멤버 함수로 지정하십시오.
  • 다른 매개 변수를 X::foo에 추가하면 myX에 액세스 할 수 있습니다. 사물을 어떻게 디자인 하느냐에 따라 여러 가지 방법이 있습니다. 다음은 그 예입니다. int X::foo(const char * const key, X *& theXpointer)
0

정적 함수에서 멤버 데이터에 액세스 할 수 없습니다. 정적 데이터 및 기타 정적 함수에만 액세스 할 수 있습니다. 클래스 함수가 ​​객체의 멤버에 대해 작동해야하는 경우 해당 함수를 정적으로 선언하거나 해당 객체를 정적 함수의 매개 변수로 전달해야합니다.

0

"액세스 클래스 개체 유형"이라고 할 때 어떤 의미인지 모르겠습니다. 작성한 코드는 정적 X :: foo 함수에서 X 유형을 사용할 수있게합니다 (물론 int를 반환한다고 선언 했으므로 값을 반환해야합니다).

필자가 작성한 것처럼 X의 인스턴스에 대한 포인터를 선언하고 있으므로 코드에서 의도 한 것이거나 포인터를 사용하여 수행 할 작업이 확실하지 않습니다.