2013-01-15 3 views
2

위임 건축 질문 : 컴파일러 오류 C2039 : '{ctor에가}'로깅의 구성원이 아닌 :: LogManager의 나는 마이크로 소프트의 C++ 2012년 11월 CTP 컴파일러하지 사용하고C++ 위임 생성자와 헤더

Visual Studio 2012의 기본 스크립트이므로 새로운 C++ 기능 (가변적 인 템플릿 등)에 액세스 할 수 있습니다.

네임 스페이스 및 헤더 파일을 사용하여 위임 된 구성을 작동 시키려고합니다 ... Visual Studio 2012에서 아직 구현되지 않은 기본 생성자 상속 기능에 해당되는지 확실하지 않습니다. 그래서 이것이 작동하지 않아야하는 경우 일 수 있습니다.

C++ 11에서 어떻게합니까?

// LogManager.h extract 

namespace Logging { 
    class LogManager 
    { 
private: 
      static std::wstring defaultFileName; 
      explicit LogManager(std::wstring logFileName); 
      explicit LogManager(); 
      ~LogManager(void); 
} 

// LogManager.cpp extract 
/******************************************************************** 
*****/ 
Logging::LogManager::LogManager(std::wstring fileName) 
{} 

/******************************************************************** 
*****/ 
Logging::LogManager::LogManager() 
    : LogManager(defaultFileName) // Yields C2664  
// : Logging::LogManager::LogManager(defaultFileName) // Yields C2039 
// : Logging::LogManager(defaultFileName) // Yields C2614 

{} 

오류 C2039은 : '{ctor에가}'의 멤버가 아닌 '로그 :: LogManager의'

오류 C2614 : '로그 :: LogManager의'불법 멤버 초기화 '의 LogManager는'아니다 기본 또는 멤버

오류 C2664 : '로그 :: LogManager의 :: LogManager의 (const를 로그 :: LogManager의 &)'할 수없는 변환하는 '표준 : : wstring의' 'const를 로그 :: LogManager의 &'에서 매개 변수 2

Answer : Microsoft에 이미 알려진 버그에 따라 헤더 파일에 명시 적 키워드를 사용할 수 없습니다.

생성자의 첫 번째 서명 만 작동합니다. 해결 방법.

+0

clang과 gcc 모두이 코드를 허용합니다. VS 오류 코드를 제거하고 설명으로 바꿀 수 있습니까? 또한 ** 도대체 [tag : c11]은 여기서 무엇을합니까 ** ** – Griwes

+0

(3 버전과 같이) 작동해야합니다 : http://stackoverflow.com/a/14183972/14065를 참조하면 VS2012가 지원해야하는 것처럼 보입니다. 그것 : http://stackoverflow.com/a/7422058/14065 –

+0

@ LokiAstari 당신이 당신이 할 수 있다는 말인가요? –

답변

2

이것은 CTP의 버그 인 것으로 보입니다. Stephan T. Lavavej의 this presentation에도 표시됩니다 (분 38:45 참조).

유일하게 가능한 해결 방법은 프로젝트에서 허용되는 경우 explicit 한정자를 삭제하는 것입니다. 그렇지 않으면 명시 적 생성자에 위임하지 마십시오. 특히

, 이것은하지 다른 기능이며, CTP (지원되지 않는, 상속 생성자와 관련된 인 스테판 T. Lavavej 내가 연결된 동일한 프레젠테이션에서 말한대로 - 버그 후 불과 몇 분 발생합니다).

+0

같은 비디오를 보았습니다 : http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/STLCCSeries6 ... 불행히도, 나는 그가 추천 한대로 명시 적으로 제거했다. 왜 내가 내 생성자 이름을 수식 할 수 없는지를 알 수 없을 때 다시 넣으십시오. 그래서 답변 : 자격이 없으며 노골적인 작품을 삭제하십시오. 나는이 자격의 부족이 모호한 것을 의미하는지는 잘 모른다. 감사! –