IT

오류 : 삭제 된 기능 사용

lottoking 2020. 8. 19. 18:50
반응형

오류 : 삭제 된 기능 사용


gcc4.6으로 작업 할 때 이전에 본 적이없는 다음 오류가 발생합니다.

error: use of deleted function

‘GameFSM_<std::array<C, 2ul> >::hdealt::hdealt()’ is implicitly deleted because the default definition would be ill-formed:
uninitialized non-static const member ‘const h_t FlopPokerGameFSM_<std::array<C, 2ul> >::hdealt::h’

편집 :이 부스트 MSM : 부스트 웹 페이지를 사용하는 코드의 일부에서 나옵니다.

Edit2 : = delete()소스 코드 어디에도 사용할 수 있습니다.

일반적 으로이 오류는 무엇을 의미합니까? 현재 유형의 오류가 발생하면 무엇을 찾아야합니까?


오류 메시지는 기본 생성자암시 적으로 삭제 명확하게 나타냅니다 . 그 이유는 다음과 가변적입니다. 클래스에 기본 ctor에 의해 초기화되지 않는 정적 정적 변수가 포함되어 있습니다.

class X {
    const int x;
};

이후 X::x입니다 const하지만 (그것이 POD 타입이기 때문에) 행동의 ctor는 일반적으로 초기화해야합니다. 따라서 기본 ctor를 얻으려면 직접 정의해야합니다 (그리고 초기화해야합니다 x). 참조 인 멤버로 동일한 종류의 상황을 얻을 수 있습니다.

class X { 
    whatever &x;
};

둘 다 동일하게 생성되는 할당 연산자의 암시 적도 있다는 점에 주목할 가치가 있습니다. 암시 적 할당 연산자는 일반적으로 멤버 단위 할당을 수행하지만 const 멤버 또는 참조 멤버를 사용하면 멤버를 할당 할 수 없기 때문에 그렇게 할 수 없습니다. 할당 작업을 수행 할 고유 한 할당 연산자를 작성해야합니다.

정적 const멤버가 일반적으로 정적 이어야 하는 이유입니다. 할당을 수행 할 때 어쨌든 const 멤버를 할당 할 수 없습니다. 일반적인 경우 모든 인스턴스는 동일한 값을 가지 공유 모두 사용하는 값을 변수의 사본을 많이 사용하는 것이 좋습니다.

물론 다른 값을 가진 인스턴스를 만들 수도 있습니다. 예를 들어 개체를 만들 때 값을 전달하는 두 개의 다른 개체가 있습니다. 그러나 스와핑과 같은 작업을 시도하면 const 멤버는 스왑되는 대신 원래 값을 유지합니다.


로 함수를 사용하고 있습니다 deleted.
예 :

int doSomething( int ) = delete;

= C ++ 0x의 새로운 기능을 삭제합니다. "이 함수가 즉시 중지되고"이 함수가 중지되어야 함을 의미합니다.

이 오류가 표시 될 때 대한 함수 선언을 확인해야합니다 =delete.

C ++ 0X 도입 된이에 새로운 기능 현관에 대해 자세히 알아 보려면 여기를 확인 하십시오 .


gcc 4.6은 삭제 된 함수의 새로운 기능을 지원합니다.

hdealt() = delete;

기본 생성합니다.

여기에서 컴파일러는 기본 생성자가 생성 할 수 =delete있습니다.


현재 C ++ 0x 표준에서는 삭제 구문을 사용하여 기본 생성 명시 적으로 사용할 수 있습니다.

MyClass() = delete;

Gcc 4.6 은이 구문을 지원하는 첫 번째 버전을 출시합니다.


이러한 시도해 주시겠습니까? gcc-4.6이 없습니다.

class C
  {
public:
  const int x ;
  } ;
int main()
  {
  C c ;
  }

여기에있는 사람들이 옳다면 오류 메시지를 제공해야합니다.


gcc 4.6에서 gcc 4.8로 전환하면 문제가 해결되었습니다.


추상 클래스에서 상속하고 내 하위 클래스에서 모든 순수 가상 메서드를 구현하지 않을 때가 오류가 발생했습니다.

참고 URL : https://stackoverflow.com/questions/5966698/error-use-of-deleted-function

반응형