基础 Class 导致编译错误 (Visual Studio)
Base Class causes Compilation Error (Visual Studio)
这里是初学者。
我最近写了一些代码来使用 spdlog 进行日志记录。
我将其基于“单例”基础 class 但它似乎无法正常工作,这让我很恼火,因为在所有其他情况下我都使用完全相同的“单例”基础 class 有效。
我收到以下错误:
1>D:\dev\Makeshift\MakeshiftEngine\src\Utility\Log.h(20,33): error C2504: 'Singleton': base class undefined
1>D:\dev\Makeshift\MakeshiftEngine\src\Utility\Log.h(20,33): error C2143: syntax error: missing ',' before '<'
1>D:\dev\Makeshift\MakeshiftEngine\src\Utility\Log.h(24,16): error C3668: 'MS::Debug::Logger::Init': method with override specifier 'override' did not override any base class methods
需要使用的一些资源
单例Class
namespace MS
{
template <class T>
class Singleton
{
public:
static T& Get();
virtual void Init() {};
virtual void Shutdown() {};
protected:
explicit Singleton<T>() = default;
};
template<typename T>
T& Singleton<T>::Get()
{
static_assert(std::is_default_constructible<T>::value, "<T> needs to be default constructible");
static T m_Instance;
return m_Instance;
}
} // namespace MS
日志记录Class
#include "Utility/Singleton.h"
namespace MS
{
namespace Debug
{
class Logger : public Singleton<Logger>
{
public:
virtual void Init() override;
static std::shared_ptr<spdlog::logger> getConsole();
protected:
static std::shared_ptr<spdlog::logger> m_Console;
};
}
}
和(如有必要)从中调用的函数
MS::Debug::Logger::Get().Init();
// For those who are downvoting, could you please explain why?
// Is it my formatting?
// or Is my question just THAT dumb?
// If it is the latter, I am sorry, but I would still greatly appreciate it if you could answer it.
提前非常感谢你们的回答:D
抱歉,如果这是一个愚蠢的简单问题,我是一个初学者,我找不到答案,尽管它可能正盯着我的脸 :)
[“Igor Tandetnik”和“drescherjm”给出的答案]
循环包括!
Singleton.h
包含 Log.h
,导致循环包含,导致编译器失控。
始终检查您包含的内容,如果您包含另一个包含您包含它的文件的文件,也会发生这种情况。
它发生在我的 pch
class 身上。
这就是为什么你 不应该 在 headers 中包含 pch
我猜。
这里是初学者。
我最近写了一些代码来使用 spdlog 进行日志记录。
我将其基于“单例”基础 class 但它似乎无法正常工作,这让我很恼火,因为在所有其他情况下我都使用完全相同的“单例”基础 class 有效。
我收到以下错误:
1>D:\dev\Makeshift\MakeshiftEngine\src\Utility\Log.h(20,33): error C2504: 'Singleton': base class undefined
1>D:\dev\Makeshift\MakeshiftEngine\src\Utility\Log.h(20,33): error C2143: syntax error: missing ',' before '<'
1>D:\dev\Makeshift\MakeshiftEngine\src\Utility\Log.h(24,16): error C3668: 'MS::Debug::Logger::Init': method with override specifier 'override' did not override any base class methods
需要使用的一些资源
单例Class
namespace MS
{
template <class T>
class Singleton
{
public:
static T& Get();
virtual void Init() {};
virtual void Shutdown() {};
protected:
explicit Singleton<T>() = default;
};
template<typename T>
T& Singleton<T>::Get()
{
static_assert(std::is_default_constructible<T>::value, "<T> needs to be default constructible");
static T m_Instance;
return m_Instance;
}
} // namespace MS
日志记录Class
#include "Utility/Singleton.h"
namespace MS
{
namespace Debug
{
class Logger : public Singleton<Logger>
{
public:
virtual void Init() override;
static std::shared_ptr<spdlog::logger> getConsole();
protected:
static std::shared_ptr<spdlog::logger> m_Console;
};
}
}
和(如有必要)从中调用的函数
MS::Debug::Logger::Get().Init();
// For those who are downvoting, could you please explain why?
// Is it my formatting?
// or Is my question just THAT dumb?
// If it is the latter, I am sorry, but I would still greatly appreciate it if you could answer it.
提前非常感谢你们的回答:D
抱歉,如果这是一个愚蠢的简单问题,我是一个初学者,我找不到答案,尽管它可能正盯着我的脸 :)
[“Igor Tandetnik”和“drescherjm”给出的答案]
循环包括!
Singleton.h
包含 Log.h
,导致循环包含,导致编译器失控。
始终检查您包含的内容,如果您包含另一个包含您包含它的文件的文件,也会发生这种情况。
它发生在我的 pch
class 身上。
这就是为什么你 不应该 在 headers 中包含 pch
我猜。