문제

gcc 4.6.2를 사용하고 있습니다.

나는 벡터 shared_ptr의 push_back을 시도하고 있습니다.

하지만 gcc는 매번 오류를 발생시킵니다.

다음은 내 코드 라인입니다. 라코 디스

내 gcc가주는 오류는 다음과 같습니다. 라코 디스

내 눈에는 std :: make_shared가 std :: shared_ptr을 생성한다는 오류가 있습니다.
하지만 gcc에서 shared_ptr은 std :: tr1 네임 스페이스에 있습니다.
어떻게 고칠 수 있나요?

도움이 되었습니까?

해결책

내가 올바르게 이해한다면 make_shared는 C ++ 11의 새로운 기능이고 std 네임 스페이스에 있지만 -std=gnu++0x 또는 이와 유사한 것으로 컴파일 한 경우에만 사용할 수 있습니다.하지만 그렇게하면 shared_ptrstd에 있습니다.

문제는 shared_ptr에 다른 버전의 std::tr1가 있지만 C ++ 11 모드에서는 사용해서는 안됩니다. 지원 중단 으로 간주되어야합니다.

솔루션은 단순히 tr1의 모든 사용을 제거하고 이러한 클래스의 전체 C ++ 11 버전을 사용하는 것입니다.

다른 팁

C ++ 템플릿 오류 메시지는 읽을 거리가 될 수 있습니다.하지만 답은 두 번째 메모에 있습니다. 라코 디스

문제는 std::make_shared (std::shared_ptr를 생성)를 사용하여 std::tr1::shared_ptr의 벡터에 전달하고 있다는 것입니다.

가장 간단한 해결책은 TR1을 떨어 뜨리는 것입니다.TR1의 내용은 C ++ 11 지원을 추가 할 때 컴파일러가 구현 한 첫 번째 기능 중 일부였습니다. 라코 디스

std::tr1::shared_ptr 사용을 중단 할 수없는 경우.make_shared는 TR1의 일부가 아니므로 사용을 중단해야합니다.

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