尝试编译该项目时,出现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包含在其他位置并且不记得需要其他哪个包含时,它将使您头疼。

09-09 20:06