문제

나는 내 팀에 컴파일러 경고를 다시 켤 수 있도록 이야기했습니다. 어떤 모든 경고 (-W)가 비활성화 된 방법 (요청하지 마십시오 ...). 그들 대부분은 분명하지만 그들 중 하나는 정말 성가신 일입니다. 나는 많은 장소에서 사용되는 데이트 및 시간 수업에서 그것을 얻습니다. 이야기는 정말 간단합니다. 시간은 날짜의 서브 클래스이며 둘 다 연산자를 정의했습니다. 그것에 무엇이 잘못 될 수 있습니까? 내가받는 경고는 다음과 같습니다.

Warning: ACTime::operator- hides the function ACDate::operator-(const ACDate&) const.

아마도 누군가가 Sunstudio C ++ 컴파일러 경고 각각의 의미를 설명하는 문서를 연결시킬 수 있습니까? 이거 안 해요 ... 감사합니다!

도움이 되었습니까?

해결책

나는 그 특정 경고로 당신을 도울 수 있습니다 - 그것은 이런 경고처럼 보입니다. C ++ FAQ 라이트. 우연히 Acdate에서 Actime :: 운영자가 사용하는 인수 유형을 바꾸셨습니까?

다른 팁

Sunstudio 컴파일러와 함께 이것을 보았습니다. 기본적으로 다음과 같은 구성이 있습니다.

class ACDate
{
   public:
     ACDate &operator-(const ACDate &);
};

class ACTime : public ACDate
{
    public:
    ACTime &operator-(const ACTime &);
};

C ++ 스코핑 규칙으로 인해 Actime :: Operator- Acdate :: Operator-는 Actime Object의 맥락에서 acdate :: 연산자를 숨 깁니다. 이것은 매우 정상이지만 Sunstudio 컴파일러는이 문제에 대해 경고합니다.

이 상황에 대한 한 해결책은 Actime의 클래스 선언에서 'acdate :: operator-'를 사용하는 명시 적이지만, 원하는 것은 아닐 수도 있습니다.

당신의 상황에 대한 잠재적으로 더 나은 해결 방법은 운영자를 자유로운 친구 기능으로 만드는 것입니다. 그러나 그것은 다른 흥미로운 문제로 이어질 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top