2010-03-17 5 views
7

way 더 읽기 쉽기 때문에 새로운 C++ 0x 유형의 안전한 enum에 C++ 유형 안전 psuedo-enums를 끔찍한 엉터리로 리팩터링했습니다. 어쨌든, 난 내 보낸 클래스에서 사용, 그래서 명시 적으로 내보낼 수 표시 : 유형이 이미g ++ C++ 0x enum 클래스 컴파일러 경고

을 정의 후 무시

유형 속성 : ++ g으로이 컴파일

enum class __attribute__((visibility("default"))) MyEnum : unsigned int 
{ 
    One = 1, 
    Two = 2 
}; 

다음과 같은 경고를 얻을 수

: 내가 아는 한, 그 경고가 같은 실제 실수를 방지하기위한 것입니다, 이후

이것은 매우 이상한 것 같다 10

enum class의 정의에서 가시성 속성 만 표시 했으므로 분명히 그 일을하지는 않습니다. 다시 정의하거나 다른 곳에서 선언 할 필요가 없습니다. (이 오류를 단일 파일).

궁극적으로이 코드를 실제로 만들 수는 없습니다. 값을 변경하고 공유 라이브러리를 다시 컴파일하지 않고 소비자를 다시 컴파일하면 소비자가 새로운 값과 공유 라이브러리는 그들과 함께 무엇을 해야할지 잘 모릅니다. (처음에는 그렇게 생각하지는 않지만).

나는 너무 성급한가? 이것은 무시해도됩니까? 나는 그렇게 생각한다. 그러나 동시에,이 오류가 발생하면 Werror으로 컴파일하는 것을 막을 수있어서 불편하다. 나는이 문제가 사라지는 것을 정말로보고 싶다.

답변

3

-Wno-attributes 플래그를 전달하여 경고를 해제 할 수 있습니다.

(그것은 아마 GCC의 버그?) 그것은 4.8.2 ++ g와 나를 위해 다음과 같은 방식으로 작동

+1

I을 버그를 GCC의 Bugzilla에보고했다. –

+1

@TravisGockel : 저 티켓을 알려주시겠습니까? 아래에 해결 방법을 게시했습니다. – erenon

+0

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43407 – vpicaver

1

:

enum class MyEnum : unsigned int 
__attribute__((visibility("default"))) 
{ 
    One = 1, 
    Two = 2 
}; 

합니다 (attribute 선언의 위치를 ​​변경)