은 무슨 뜻인가요?


92

2 개의 수업이 있습니다.

class base {
    virtual void foo() {};
};

class derived : public base {
    void foo() { base::foo(); }
};

나는 실수를해서 base:foo();대신 썼다 base::foo();. 코드가 컴파일되고 실행되었지만 세그 폴트되었습니다.

Google로 어떻게 검색 할 수 있는지, 무엇인지 모르겠지만 매우 관심이 있습니다. 그게 무슨 뜻입니까?

base:foo();

중요한 경우 :

class base : public QAbstractGraphicsShapeItem

32
그것은이다 레이블 .
chris

20
이것은 경고를 켜는 것이 도움이되는 경우입니다. 실시간으로 확인하십시오 ... warning: label 'base' defined but not used [-Wunused-label]...이 질문 페이지를 추가해야 할 수도 있습니다 . 경고를
켜 보셨나요

6
그것은 스택 오버플로로 끝났습니다. 얼마나 적절한가!
Laurent LA RIZZA

답변:


125
void foo() { base:foo(); }

다음과 같습니다.

void foo()
{
   base: // An unused label.
   foo(); // Calls the function again, resulting in infinite recursion.
}

무한 재귀로 인해이 함수로 인해 스택 오버플로가 발생합니다.


1
예, foo()콜 스택에서 많은 호출을 보았을 때 그 실수를 발견했습니다 . 감사
railmisaka

gcc / clang 등에서 사용할 수있는 경고가 있습니까?
무감각

10
@Serthy, 사용할 때 -Wall경고 메시지가 나타납니다. socc.cc:3:4 : warning : label 'base'defined but not used [-Wunused-label] base : // An unused label.
R Sahu

10
@Serthy : IIRC Visual Studio에는 "모든 제어 경로에서 재귀 적"이라는 경고가 있습니다.
MSalters
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.