尝试编译该项目时,出现2个无法解决的错误。
1>initialization.h(6): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>initialization.h(6): error C2146: syntax error : missing ',' before identifier 'diskSpaceNeeded'
Here is the file where the error happens:
Initialization.h
#pragma once
extern bool CheckStorage(const DWORDLONG diskSpaceNeeded);
初始化文件
#include "Initialization.h"
#include "../Main/EngineStd.h"
#include <shlobj.h>
#include <direct.h>
//
// CheckStorage
//
bool CheckStorage(const DWORDLONG diskSpaceNeeded)
{
// Check for enough free disk space on the current disk.
int const drive = _getdrive();
struct _diskfree_t diskfree;
_getdiskfree(drive, &diskfree);
unsigned __int64 const neededClusters =
diskSpaceNeeded /(diskfree.sectors_per_cluster*diskfree.bytes_per_sector);
if (diskfree.avail_clusters < neededClusters)
{
// if you get here you don’t have enough disk space!
ENG_ERROR("CheckStorage Failure: Not enough physical storage.");
return false;
}
return true;
}
我认为include有点问题,但是我找不到错误发生的地方。
最佳答案
您的Initialization.h使用DWORDLONG
,它不属于C ++标准。这意味着您需要先定义它,然后才能使用它。
但是,您的Initialization.cpp首先包含Initialization.h,然后包含../Main/EngineStd.h,后者定义Windows特定的内容。因此,编译器在尝试按给定它们的顺序解析包含时会抱怨。
这也是当您在Initialization.h之前将顺序切换为包含../Main/EngineStd.h时起作用的原因。
通常认为,包含文件包含文件本身正在使用的内容的良好做法。因此,您的Initialization.h应该包含一个定义DWORDLONG
的文件的include指令。您当前的解决方案可能会起作用,但是当您尝试将Initialization.h包含在其他位置并且不记得需要其他哪个包含时,它将使您头疼。