委托建设问题: 编译器错误C2039:'{ctor}'不是Logging :: LogManager
的成员我使用的是Microsoft的 C ++ 2012年11月CTP编译器,而不是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}':不是'Logging :: LogManager'的成员
错误C2614:'Logging :: LogManager':非法成员初始化:'LogManager'不是基础或成员
错误C2664:'Logging :: LogManager :: LogManager(const Logging :: LogManager&)':不能 将参数2从'std :: wstring'转换为'const Logging :: LogManager&'
答案:: 根据Microsoft已知的已知错误,无法在头文件中使用显式关键字。
只有构造函数的第一个签名才能使用此解决方法。
答案 0 :(得分:2)
这似乎是CTP中的一个错误。它也出现在Stephan T. Lavavej的this presentation期间(见最后38:45)。
唯一可行的解决方法是删除explicit
限定符(如果在项目中可接受)。否则,只需避免委托给显式构造函数。
特别是,不与继承的构造函数相关,这是一个不同的功能,并且CTP不支持(正如Stephan T. Lavavej在我链接的同一个演示文稿中说的那样 - 只是一些发生错误后几分钟)。