2011-01-25 6 views
1

-Wextra를 사용하는 g ++ 버전 4.2.1을 사용하고 있습니다. (나는 BaseClass로와 클래스의 실제 이름을 대체 한) 나는 도서관에서 헤더를 포함하고있어, 나는 -Wextra으로 사용하는 라이브러리의 클래스에 대한 다음과 같은 경고가 계속 :파생 클래스의 복사 생성자에서 기본 생성자를 명시 적으로 초기화하는 것에 대한 경고를 사용하지 않음

warning: base class ‘class BaseClass’ should be explicitly initialized in the copy constructor 

내 질문은 : 어떻게하면이 경고를 비활성화 할 수 있습니까? 예를 들어, -Wextra는 -Wuninitialized도 가능하지만, -Wno-uninitialized를 컴파일러 플래그로 전달하여 간단하게 오버라이드 할 수 있습니다. 복사 생성자에 대한 경고와 비슷한 것이 있습니까? g ++ 맨 페이지 또는 다른 포럼 게시물에서 답변을 찾을 수 없었습니다.

+0

몇 가지 샘플 코드가 없어도 어떻게 알 수 있습니까? –

+0

경고를 비활성화하는 것은 거의 좋은 접근 방법이 아님을 유의하십시오. –

+0

이 경고는 틀림없이 불필요합니다. 파생 클래스의 초기화 목록에 기본 클래스 생성자가 지정되지 않으면 기본 생성자가 호출됩니다. 이 경우, 나는이 행동을 알고 있고 이해하고 있으므로이 경고가 방출되는 것을 원하지 않습니다. (더하기, 그것은 제가 수정하지 않을 라이브러리에 있습니다.) – user588303

답변

3

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html (Wextra 검색) -Wextra의 고유 한 부분이며, 개별적으로 비활성화 할 수 없습니다 수에 따라 (예를 들면이 별도로 나열되지 않은 :하지만 컴파일러는 당신이 실제로이 대신 할 수도 있음을 시사한다 자체적으로 -W 옵션으로).

-Wextra을 사용하지 않도록 설정하거나 전혀 사용하지 않고 해당 링크의 모든 구성 요소를 개별적으로 사용하도록 설정하는 것이 가장 좋습니다.

3

실제 문제가 아니며 라이브러리를 변경할 수 없으면 (그렇게 할 수 없거나 그렇게했을 수도 있습니다) GCC diagnostic pragma을 사용하여 일시적으로 경고를 사용 중지 할 수 있습니다.

class BaseClass 
{ 
public: 
    BaseClass(); 
    BaseClass(const BaseClass&); 
}; 

class DerivedClass : public BaseClass 
{ 
public: 
    DerivedClass(const DerivedClass&); 
}; 

이 복사 생성자 :

DerivedClass::DerivedClass(const DerivedClass& obj) 
    // warning: no BaseClass initializer! 
{ 
} 

정말 같은 의미 감안할 때

+0

흥미 롭습니다. 컴파일러 플래그에 -fdiagnostics-show-option을 추가하면 경고가 어떤 옵션을 제어하는지 보여 주기만하면 -Wextra가됩니다. 외관상으로는, --Wextra 이상으로 경고를 개별적으로 제어 할 수있는 방법이 없습니다. 그러나 컴파일러가 진단 pragma를 사용하여 라이브러리의 헤더 파일을 통과 할 때만 -Wextra를 해제 할 수 있습니다. 감사! – user588303

6

DerivedClass::DerivedClass(const DerivedClass& obj) 
    // Default construct the base: 
    : BaseClass() 
{ 
} 

당신이 경우 위와 같이 기본 - 생성자의 초기화에 넣을 수 있습니다 그것은 정말로 당신이 의미하는 것이고, 경고는 사라질 것입니다.

DerivedClass::DerivedClass(const DerivedClass& obj) 
    // Copy construct the base: 
    : BaseClass(obj) 
{ 
} 
+0

그래, 맞아. 그러나 다른 모든 경고를 --Wextra가 켜 놓은 상태로 유지하면서 그 경고 하나만 사용 중지하는 방법을 알고 있습니까? – user588303

+2

아니요, 아닙니다. 이 경우 경고를 사용하지 않도록 코드를 수정하는 것이 좋습니다. – aschepler

관련 문제