make_shared create std :: shared_ptr?gcc 4.6.2
-
28-10-2019 - |
문제
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_ptr
도 std
에 있습니다.
문제는 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의 일부가 아니므로 사용을 중단해야합니다.