委任された構築の質問: コンパイラエラーC2039:'{ctor}'はLogging::LogManagerのメンバーではありません
VisualStudio2012のデフォルトではなくMicrosoftのC++2012年11月CTPコンパイラを使用しているため、新しいC ++機能(可変個引数テンプレートなど)にアクセスできます。
名前空間とヘッダーファイルを使用して委任された構造を機能させようとしています...これが、VisualStudio2012でまだ実装されていない基本コンストラクターの継承機能に該当するかどうかはわかりません。したがって、これが機能することを期待すべきではない場合があります。
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'から'constLogging :: LogManager&'に変換できません
回答:: Microsoftがすでに知っている既知のバグにより、ヘッダーファイルで明示的なキーワードを使用することはできません。
コンストラクターの最初の署名のみが機能し、この回避策で機能します。