0

在尝试编译这个项目时,我遇到了 2 个我无法解决的错误。

1>initialization.h(6):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
1>initialization.h(6):错误 C2146:语法错误:在标识符“diskSpaceNeeded”之前缺少“,”

这是发生错误的文件:

初始化.h

#pragma once
extern bool CheckStorage(const DWORDLONG diskSpaceNeeded);

初始化.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;
}

我认为包含有问题,但我找不到错误发生的位置。

4

1 回答 1

3

您的 Initialization.h 使用DWORDLONG的不是 C++ 标准的一部分。这意味着您需要先定义它,然后才能使用它。

但是,您的 Initialization.cpp 首先包含 Initialization.h,然后包含定义 Windows 特定内容的 ../Main/EngineStd.h。因此,编译器在尝试按照您给它们的顺序解析包含时会抱怨。

这也是当您在 Initialization.h 之前切换顺序以包含 ../Main/EngineStd.h 时它起作用的原因。

包含文件包含他们自己使用的东西通常被认为是一种好的做法。因此,您的 Initialization.h 应该包含定义文件的包含指令DWORDLONG。您当前的解决方案可能有效,但是当您尝试在其他地方包含 Initialization.h 并且不记得它需要哪些其他包含时,它会让您头疼。

于 2013-07-24T05:11:24.757 回答