此代码旨在帮助分析游戏代码 - 我似乎无法理解为什么它不起作用。我收到以下错误消息:未定义引用`ProfileSample :: profileSamples',另一个用于我使用其成员的每个点。
#ifndef PROFILER_HPP_
#define PROFILER_HPP_
#define MAXIMUM_PROFILE_SAMPLES 16
class ProfileSample {
private:
int sampleIndex, parentIndex;
static int previousSampleIndex;
inline float getTime(void) {
return ((float)SDL_GetTicks()) / 1000.0f;
}
static struct profileSamples {
float start, duration;
char *name;
} profileSamples[MAXIMUM_PROFILE_SAMPLES];
public:
ProfileSample(const char *name) {
sampleIndex = 0;
while(profileSamples[sampleIndex].name != NULL)
sampleIndex ++;
parentIndex = (sampleIndex > 1) ? previousSampleIndex : -1;
previousSampleIndex = sampleIndex;
profileSamples[sampleIndex].name = (char *)name;
profileSamples[sampleIndex].start = getTime();
}
~ProfileSample(void) {
float end = getTime();
profileSamples[sampleIndex].duration = (end - profileSamples[sampleIndex].start);
if(parentIndex >= 0)
profileSamples[parentIndex].start -= profileSamples[sampleIndex].duration;
if(sampleIndex == 0)
output();
}
static void output(void) {
for(int i = 1; i < MAXIMUM_PROFILE_SAMPLES; i ++) {
printf("\nName: %s"
"\nDuration: %f"
"\nOverall percentage: %f",
profileSamples[i].name,
profileSamples[i].duration,
(profileSamples[0].duration / 100) * profileSamples[i].duration);
}
}
};
#endif /* PROFILER_HPP_ */
有人可以解释我在这里缺少的东西吗?变得简单,我只是离开了C for C ++
答案 0 :(得分:0)
static struct profileSamples {
float start, duration;
char *name;
} profileSamples[MAXIMUM_PROFILE_SAMPLES];
您刚刚声明了这个静态结构。 你还没有真正初步化它。
如果你添加
struct ProfileSample::profileSamples ProfileSample::profileSamples[16] = {};
int ProfileSample::previousSampleIndex = 1;
在课程声明之后,它实际上将解决问题。
您可以将其视为第二步,即用实际数据填充内存。第一个是描述将使用一些内存以及解释数据将具有什么。
希望这一点与评论中标记的问题相结合,可以帮助您了解正在发生的事情。