나는 우리 가게를 VS2008sp1에서 VS2010으로 옮길 것을 고려하고있다. 나는 2008 년에 매우 만족해 왔지만 TR1을 우리 코드에서 사용하고 싶습니다.의견 : VS2010으로 전환 한 C++ 개발자는 누구입니까?
나는 2010 V의 동료 프로그래머의 게슈탈트에 정말 관심이 있어요. 2008, 오히려 다음 중 어느 하나 개의 요소에 솔루션을보다!
그러나, 나는 우리의 프로젝트를 & 솔루션을 변환하는 과정에있어, 나는이 IMO, 비율은 오히려 절름발이 "잡음이 신호를"것을 찾는거야. 지금까지 필자는 $ (TargetExt)와 같은 여러 가지 가짜 Microsoft 빌드 경고를 제거해야하는 모든 프로젝트를 다시 연결하는 방법을 찾고 있습니다. ...
이 메시지에는 몇 가지 변형이 있으며 프로젝트마다 여러 가지가 있으며 약 75 개의 프로젝트가 있습니다. 필자는이 프로젝트 출력 타겟을 모두 다시 써서 시간을 낭비하지 않으려한다. (명백하게 MSBuild는 링커의 타겟과 컴파일러의 타겟이 동일해야하며, 필자에게 필요하거나 바람직하지 않다).
또한 [당혹감], 우리는 여전히 VSS를 사용합니다. 그리고 MSBuild 준수 프로젝트에 대한 마사지를 시도하면서 처음으로 VS2010의 VSS 인터페이스가 2008 년 1/4 정도 빠르다는 것을 알았습니다. 그것은 끔찍한 일입니다. 일반적으로 VSS의 성능).
한숨 ... 나는 "답장"중 약 1/2 이상이 "VSS 사용을 중지하십시오."라고 알고 있습니다. 그래, 좋은 생각이야. 먼 미래에 전복으로 옮겨 갈지도 모른다. 하지만 한 번에 한 가지. 이는 MSBuild 문제 나 새로운 C++ 문제가 아닌 VSS 속도 문제 만 해결합니다.
새로운 표준 라이브러리와 TR1 자료가 일부 코드를 손상시킨 것 같습니다. 그 자체로 충격적이지는 않습니다. 사실이 아니라면 나는 놀랐을 것입니다. 하지만 그 오류 메시지는 LOOOONNNNNGGGG입니다. STL을 사용하고 오류 메시지가 다소 복잡해 지도록 상위 문자열 이름을 추론 한 오류 문자열 파서 도우미를로드해야하는 초기의 날을 생각 나게합니다. 유능한. 10 년이 지난 지금, 나는 진단이 너무 깊고 복잡하여 다시는 이해가되지 않는다는 것을 알게되었고, 실제 문제가 무엇인지 전혀 알지 못합니다. 한 경우에는 내가 multimap은에 새로운 요소를 삽입하려고 해요 :
typedef CCimexDataSource::CategoryID CategoryID;
typedef std::multimap<CString, CCimexDataSource *> description_sources_multimap;
typedef std::map<CategoryID, description_sources_multimap> category_sources_map;
// attempt to insert a new description->CCimexDataSource* keyed by CategoryID (an unsigned)
m_category_sources_map[it->GetCategory()].insert(std::make_pair(it->GetDescription(), &(*it)));
내가 얻을 :
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(163): error C2440: 'initializing' : cannot convert from 'const CCimexDataSource *' to 'CCimexDataSource *'
1> Conversion loses qualifiers
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(255) : see reference to function template instantiation 'std::_Pair_base<_Ty1,_Ty2>::_Pair_base<_Ty,const CCimexDataSource>(_Other1 &&,_Other2 &&)' being compiled
1> with
1> [
1> _Ty1=const CString,
1> _Ty2=CCimexDataSource *,
1> _Ty=ATL::CStringT<char,StrTraitMFC<char>>,
1> _Other1=ATL::CStringT<char,StrTraitMFC<char>>,
1> _Other2=const CCimexDataSource *
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory(208) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2>::pair<ATL::CStringT<BaseType,StringTraits>,const CCimexDataSource*>(std::pair<ATL::CStringT<BaseType,StringTraits>,const CCimexDataSource *> &&)' being compiled
1> with
1> [
1> _Ty1=const CString,
1> _Ty2=CCimexDataSource *,
1> BaseType=char,
1> StringTraits=StrTraitMFC<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory(280) : see reference to function template instantiation 'void std::allocator<_Ty>::construct<std::pair<_Ty1,_Ty2>>(std::pair<const _Kty,CCimexDataSource> *,_Other &&)' being compiled
1> with
1> [
1> _Ty=std::pair<const CString,CCimexDataSource *>,
1> _Ty1=ATL::CStringT<char,StrTraitMFC<char>>,
1> _Ty2=const CCimexDataSource *,
1> _Kty=CString,
1> _Other=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtree(592) : see reference to function template instantiation 'void std::_Cons_val<std::allocator<_Ty>,_Ty,std::pair<_Ty1,_Ty2>>(_Alloc &,std::pair<const _Kty,CCimexDataSource> *,std::pair<_Ty1,_Ty2> &&)' being compiled
1> with
1> [
1> _Ty=std::pair<const CString,CCimexDataSource *>,
1> _Ty1=ATL::CStringT<char,StrTraitMFC<char>>,
1> _Ty2=const CCimexDataSource *,
1> _Alloc=std::allocator<std::pair<const CString,CCimexDataSource *>>,
1> _Kty=CString
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtree(755) : see reference to function template instantiation 'std::_Tree_nod<_Traits>::_Node *std::_Tree_val<_Traits>::_Buynode<_Ty>(_Valty &&)' being compiled
1> with
1> [
1> _Traits=std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>,
1> _Ty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>,
1> _Valty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\map(364) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2> std::_Tree<_Traits>::insert<_Ty>(_Valty &&)' being compiled
1> with
1> [
1> _Ty1=std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>>>,
1> _Ty2=bool,
1> _Traits=std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>,
1> _Ty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>,
1> _Valty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1> ]
1> c:\users\steve\projects\cimex cad-cam\14.0\cimex application\cimcad\formaddautomaticpage.h(17) : see reference to function template instantiation 'std::_Tree_iterator<_Mytree> std::multimap<_Kty,_Ty>::insert<std::pair<_Ty1,_Ty2>>(_Valty &&)' being compiled
1> with
1> [
1> _Mytree=std::_Tree_val<std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>>,
1> _Kty=CString,
1> _Ty=CCimexDataSource *,
1> _Ty1=ATL::CStringT<char,StrTraitMFC<char>>,
1> _Ty2=const CCimexDataSource *,
1> _Valty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1> ]
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::second' : member could not be initialized
1> with
1> [
1> _Ty1=const CString,
1> _Ty2=CCimexDataSource *
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(167) : see declaration of 'std::_Pair_base<_Ty1,_Ty2>::second'
1> with
1> [
1> _Ty1=const CString,
1> _Ty2=CCimexDataSource *
1> ]
참고 : 위에서 <을 설정하는 방법 표준 :의 변화로 나타납니다 >는 iterators (1) 대신에 항상 const_iterators를 돌려 주도록 작동합니다. 그러나이 점은 내 질문에, 2008 그래서
에 비교되는 더 컴파일러 진단을 뒤얽힌 얼마의 예를 가지고 그냥 : 최근에 변환 한 그곳에 C에 대한 ++ 상점 : 당신은 후회 않는다 전환, 또는 그것을 감사? 어떻게 그렇게?
(1) Scott Meyer의 "Effective STL", (c) 2001, p95, item 22.
난 그냥이 다 퉜다 : 그것은 내가으로 실행했던 코드를 깨는 많은 변화를 다룹니다 http://blogs.msdn.com/b/vcblog/archive/2009/05/25/stl-breaking-changes-in-visual-studio-2010-beta-1.aspx?wa=wsignin1.0
"나는 2008 년에 매우 만족해 왔지만 TR1을 코드에 사용하고 싶습니다." <- 2008 SP1은 TR1을 지원합니다 ... 또한 코드 상자에 오류 메시지를 게시하면 코드를 더 쉽게 추출 할 수 있습니다. –
힌트 : 컴파일 오류를 디버깅 할 때 병렬 작성을 해제하십시오. 여러 빌드 프로세스의 라인을 인터리브하면 이미 혼란스러운 작업을 거의 불가능하게 만듭니다. 그런 다음 오류 메시지의 첫 번째 줄에 중점을 둡니다. 그 대답이 "예, 당신 (컴파일러)이 그렇게 할 수 없다는 것을 압니다. 왜 그렇게하려고합니까?" 컨텍스트 덤프를 살펴 보겠습니까? –
이 경우 쓰기 가능한 'CCimexDataSource *'가 필요하지만 읽기 전용'const CCimexDataSource * '가 제공된다고합니다. 'it'는'const_iterator'의 일종입니까? –