"<class>에 대한 typeinfo"에 대한 정의되지 않은 참조

라파엘 로페스

이 문제에 대한 질문을 보았지만 저에게 맞는 해결책을 찾을 수 없습니다. 저는 C ++에서 Visual Code를 사용하고 있으며 C ++ 버전은 C ++ 11보다 앞선 것입니다. 저는 DNS 클래스를 가지고 있으며, 다양한 클래스가 주 DNS 메시지 클래스를 상속합니다. 이런 식으로 일부 특성을 분해 할 수 있습니다. 유형 유형 필드의 기능에서 나는 객체의 유형을 알 수 있습니다. 예를 들어 컴파일 할 때 "DNS_RR_A에 대한 typeinfo에 대한 정의되지 않은 참조"라는 오류가 발생하지만 개체의 클래스를 확인하기 위해 수행중인 각 동적 캐스트에서이 오류가 발생했습니다.

내 dnsMessage.cpp에는 생성자와 소멸자 만 있습니다.

내 수업은 다음과 같습니다.

class CDnsMessage
{       
    public:
        CDnsMessage();
        virtual ~CDnsMessage();

        virtual void GetSize() = 0;

        uint32_t       m_ttl;
        eDnsClass      m_class;
        eDnsType       m_type; 
        std::string    m_domain; 
        uint8_t        m_sizeDnsCorpse;
        uint8_t        m_sizeDomainName; 
};

class CDns_RR_A : public CDnsMessage
{
    public:
        CDns_RR_A();
        virtual ~CDns_RR_A();

        virtual void GetSize() {/*....*/}

        uint32_t        m_address;
};

다음은 동적 캐스트에서 오류와 함께 사용하는 함수의 샘플입니다. 인코딩해야하는 메시지를 받았지만 메시지의 성격을 모르기 때문에 동적으로 캐스트하여 인코딩을 조정할 수 있습니다.

//i receive a message i have to encode, i don't know the type 
void EncodeOpaqueData(CDnsMessage & msg, std::vector<uint8_t>& output)
{
//where i encode
    output.clear();

    // Error : "undefined reference to `typeinfo for CDns_RR_A'"
    if(dynamic_cast< CDns_RR_A* >( &msg ) != NULL) 
    {       
            CDns_RR_A* RR_A_msg = dynamic_cast< CDns_RR_A* >( &msg );

            uint16_t dnstype = cmn_hton16(1);
            output.push_back(dnstype);
            output.push_back(dnstype >> 8);
            /* stuff here */

            uint32_t address = cmn_hton32(RR_A_msg->m_address);
            for (int i = 0; i < 4; i++)
            {
                    output.push_back(static_cast<uint8_t>(address >>(i * 8)));
            }

    }
}

함수에 대해 더 많이 생각 해본 후에 객체의 유형을 확인하는 대신 msg-> m_type을 확인하고 해당 유형의 함수에 적응할 수 있습니다. 예를 들어 m_type 변수가 잘못 인스턴스화 될 수 있습니다. 그러나 어쨌든이 오류와 수정 방법을 이해하고 싶습니다. 미리 감사드립니다.

Jan Hudec

클래스 장애 (가상 메서드 테이블 및 typeinfo)는 처음 선언 된 가상 메서드가 컴파일 될 때 생성됩니다. 당신이 정의하는virtual ~CDnsMessage(); (즉 CDnsMessage::~CDnsMessage() {})과하면이 링크에 포함하여 정의되어있는 파일입니다.

라인 외부 정의는 약하지 않으므로 정확히 하나의 소스 (헤더 아님) 파일에 정의해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Number에 대한 vtable에 대한 정의되지 않은 참조

`yylex '에 대한 정의되지 않은 참조 &&`yyin'에 대한 정의되지 않은 참조

C ++ Code :: morsecode ()에 대한 정의되지 않은 참조 및 Code :: alphacode ()에 대한 정의되지 않은 참조

`vtable에 대한 이상한 정의되지 않은 참조

정적 constexpr에 대한 정의되지 않은 참조

정적 constexpr char []에 대한 정의되지 않은 참조

정적 constexpr char [] []에 대한 정의되지 않은 참조

정적 함수에 대한 정의되지 않은 참조

정적 함수에 대한 정의되지 않은 참조

clang의 소멸자에 대한 정의되지 않은 참조

pthread의 러너에 대한 정의되지 않은 참조

Ubuntu의 OpenGL에 대한 정의되지 않은 참조

ROS CPP의 google :: protobuf에 대한 정의되지 않은 참조

gtest의 testing :: internal :: EqFailure에 대한 정의되지 않은 참조

Eclipse CDT의 함수에 대한 정의되지 않은 참조

yyparse의`pow '에 대한 정의되지 않은 참조

makefile의 'func'오류에 대한 정의되지 않은 참조

C ++의 함수에 대한 정의되지 않은 참조

main ()의 함수에 대한 정의되지 않은 참조

make에서`main '에 대한 정의되지 않은 참조

C에서 (FUNCTIONNAME)에 대한 정의되지 않은 참조

`libbgp :: BgpFsm :: tick () '에 대한 정의되지 않은 참조

C ++- "sodium_init"에 대한 정의되지 않은 참조

pesquisar_bin에 대한 정의되지 않은 참조

MinGW 32 "ʻExitProcess @ 4 '에 대한 정의되지 않은 참조"

`ERR_load_crypto_strings '에 대한 정의되지 않은 참조

`vec_expand_ '에 대한 정의되지 않은 참조

"clrscr ();에 대한 정의되지 않은 참조"

`yylval '및`yyerror`에 대한 정의되지 않은 참조

TOP 리스트

  1. 1

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  2. 2

    std :: regex의 일관성없는 동작

  3. 3

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  4. 4

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  5. 5

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  6. 6

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  7. 7

    Ionic 2 로더가 적시에 표시되지 않음

  8. 8

    Seaborn에서 축 제목 숨기기

  9. 9

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  10. 10

    복사 / 붙여 넣기 비활성화

  11. 11

    ArrayBufferLike의 typescript 정의의 깊은 의미

  12. 12

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  13. 13

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  14. 14

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  15. 15

    PRNG 기간보다 순열이 더 많은 목록을 무작위로 섞는 방법은 무엇입니까?

  16. 16

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  17. 17

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  18. 18

    잘못된 구성 개체입니다. Webpack이 Angular의 API 스키마와 일치하지 않는 구성 개체를 사용하여 초기화되었습니다.

  19. 19

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  20. 20

    R의 마침표와 숫자 사이에 문자열 삽입

  21. 21

    Assets의 BitmapFactory.decodeStream이 Android 7에서 null을 반환합니다.

뜨겁다태그

보관