委托(delegate) build 问题: 编译器错误 C2039:“{ctor}”不是 Logging::LogManager 的成员
我使用的是 Microsoft 的 C++ 2012 年 11 月 CTP 编译器,而不是 Visual Studio 2012 中的默认编译器,因此我可以访问新的 C++ 功能(可变参数模板等)。
我正在尝试使用命名空间和头文件进行委托(delegate)构造...我不确定这是否属于尚未在 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 已知的已知错误,无法在头文件中使用显式关键字。
只有构造函数的第一个签名才可以使用此..解决方法。
最佳答案
这似乎是 CTP 中的一个错误。它也会出现在this presentation期间作者:Stephan T. Lavavej(参见 38:45 分钟起)。
唯一可能的解决方法是删除 explicit
限定符(如果您的项目可以接受)。否则,请避免委托(delegate)给显式构造函数。
特别是,这与继承的构造函数无关,这是一个不同的功能,并且不受 CTP 支持(正如 Stephan T. Lavavej 在我链接的同一个演示文稿中所说 - 只是一些错误发生后几分钟)。
关于带 header 的 C++ 委托(delegate)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14347428/