错误C4430:缺少类型说明符

error C4430 : missing type specifier

本文关键字:类型 说明符 C4430 错误      更新时间:2023-10-16

在试图编译这个项目时,我遇到了两个错误,我不知道如何解决。

1>initialization.h(6):错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int1> 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;
}

我认为includes有问题,但我找不到错误发生在哪里。

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

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

这也是当您将订单切换为包含时它工作的原因/初始化前的主/引擎时间。小时

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