在尝试编译这个项目时,我得到了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'
以下是发生错误的文件:
Initialization.h
#pragma once
extern bool CheckStorage(const DWORDLONG diskSpaceNeeded);
Initialization.cpp
#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;
}
我认为包含有问题,但我无法找到错误发生的位置。
答案 0 :(得分:3)
您的Initialization.h使用DWORDLONG
,它不是C ++标准的一部分。这意味着您需要先定义它才能使用它。
但是,您的Initialization.cpp首先包含Initialization.h,然后包含../Main/EngineStd.h,它定义了Windows特定的东西。因此,编译器在尝试按照您给出的顺序解析包含时会抱怨。
这也是为什么当你在Initialization.h之前切换订单以包含../Main/EngineStd.h时它的工作原理。
通常认为包含文件的好方法包括他们自己使用的东西。所以你的Initialization.h应该包含一个定义DWORDLONG
的文件的include指令。您当前的解决方案可能会起作用,但当您尝试在其他地方包含Initialization.h时会让您头疼,并且不记得它需要哪些包含它。