#pragma once
#include "LudoCore/Singleton.h"
class LudoTimer : public Singleton<LudoTimer>
{
friend class Singleton<LudoTimer>;
public:
void Update();
void ShortenDay();
void LengthenDay();
UINT64 GetDeltaTime() const;
float GetPercentageOfDayElapsed() const;
private:
LudoTimer();
~LudoTimer();
UINT64 GetTickCount64() const;
UINT64 GetElapsedSeconds() const;
UINT64 m_DeltaTime;
// Tick Count
UINT64 m_CurrFrameTick;
UINT64 m_LastFrameTick;
int m_SecondsInADay;
static const int SHORTEST_POSSIBLE_DAY = 60;
static const int LONGEST_POSSIBLE_DAY = 86400;
static const int CHANGING_INTERVAL = 600;
};
对我来说,上面的代码看起来很正常。但是,我是C ++的新手,所以我可能会遗漏一些细微差别。我从它那里得到了一堆编译器错误,例如:
错误C2447:'{':缺少函数头(旧式正式列表?)
和
错误C2236:意外的'类' 'LudoTimer'。你忘记了';'吗?
什么给了!
答案 0 :(得分:8)
查看其他标题(LudoCore / Singleton.h)。第二个错误意味着错误发生在顶部的class LudoTimer
声明之前。
我的猜测是Singleton.h定义了一个类,并且缺少';'在那个班级定义之后。
答案 1 :(得分:3)
错误可能在LudoCore/Singleton.h
或之前包含的其他内容中。确保您的class
定义后面有;
个分号和所有内容。
快速测试:注释掉#include
并在那里粘贴template<class C> class Singleton;
预先声明。如果编译器现在抱怨不完整的类型,我是对的,如果没有,发布更多细节。
答案 2 :(得分:3)
嗯,以下编译对我来说很好,所以错误很可能不在你给我们的代码中。我建议您再次查看Mike's suggestion Singleton.h
中的错误。
//#include "LudoCore/Singleton.h"
#include <windows.h>
template< typename T >
class Singleton {};
class LudoTimer : public Singleton<LudoTimer>
{
friend class Singleton<LudoTimer>;
public:
void Update();
void ShortenDay();
void LengthenDay();
UINT64 GetDeltaTime() const;
float GetPercentageOfDayElapsed() const;
private:
LudoTimer();
~LudoTimer();
UINT64 GetTickCount64() const;
UINT64 GetElapsedSeconds() const;
UINT64 m_DeltaTime;
// Tick Count
UINT64 m_CurrFrameTick;
UINT64 m_LastFrameTick;
int m_SecondsInADay;
static const int SHORTEST_POSSIBLE_DAY = 60;
static const int LONGEST_POSSIBLE_DAY = 86400;
static const int CHANGING_INTERVAL = 600;
};
答案 3 :(得分:1)
我想知道LudoTimer是否被宣布为Singleton使用它并且前向声明是否有帮助?我在VisualStudio 2005中不需要一个,就像sbi一样,我可以通过提供Singleton声明来编译代码。如果我添加了一个简单的实现,我甚至可以这样做:
LudoTimer* timer = Singleton<LudoTimer>::instance();
还有一件事:
error C2236: unexpected 'class' 'LudoTimer'. Did you forget a ';'?
您可以尝试在#include之后的空白行上添加分号来回答此问题。如果它有帮助那么您可以显示头文件中存在问题而无需编辑它。