0

このプロジェクトをコンパイルしようとすると、解決方法がわからない 2 つのエラーが発生します。

1>initialization.h(6): エラー C4430: 型指定子がありません - int と見なされます。注: C++ は default-int をサポートしていません
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 には、定義しているファイルの include ディレクティブが含まれている必要がありますDWORDLONG。現在のソリューションは機能するかもしれませんが、Initialization.h を別の場所にインクルードしようとすると、頭痛の種になります。

于 2013-07-24T05:11:24.757 に答える