错误C4430:缺少类型说明符

时间:2013-07-24 05:03:52

标签: c++ vs2010-express

在尝试编译这个项目时,我得到了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;
}

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

1 个答案:

答案 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时会让您头疼,并且不记得它需要哪些包含它。