2012-10-10 2 views
5

다음 코드는 컴파일되지 않습니다. 왜?불가능 :이 포인터를 기본 인수로 사용합니다. 왜?

class A 
{ 
    int j; 
    void f(int i = this->j); 
} 

편집의 편의를 위해. 이

class A 
{ 
    void f(int i){}; 
    void f(); 
    int j; 
}; 

void A::f() 
{ 
    f(j); 
} 
+2

여기서 무엇을하려고하십니까? –

+3

인스턴스가 인수 선언 안의 범위에 있지 않기 때문에 ...? –

+2

"... 표현은 현재 범위, 일정 표현에서 볼 수 있습니다 함수 및 전역 변수를 결합 할 수있는 식을 지역 변수 또는 비 정적 클래스 멤버 변수를 포함 할 수 없습니다 ...." –

답변

6

기본 인수 값은 컴파일 타임에 바인딩됩니다 ... 내가 코드 적은 라인을 사용하여 수행하려고했던 것입니다.

"이"는 런타임에만 정의되어 있으므로 사용할 수 없습니다.

는 풀러 설명은 여기를 참조하십시오 : Must default function parameters be constant in C++?

+0

하지만, 그 기본 인수는 컴파일시에 바인드 할 필요가? ... 그 @alexandreC – alexandreC

+0

다른 질문입니다. –

0

다른 사람들은 이미이 작동하지 않는 이유에 댓글을 달았습니다. 코멘트 중 하나에서 :

"... 표현이 현재 범위, 상수 표현식 및 전역 변수에 볼 수 있습니다 기능을 결합 할 수 식을 지역 변수 또는 비 정적 클래스 -를 포함 할 수 없습니다. 멤버 변수 ... "

당신은 내가 명확 확실하지 않다 있지만 추가 기능을 제거하기 위해 optional을 사용할 수

void f(boost::optional<int> i = boost::none) { if(!i) i = j; ... }

관련 문제