При попытке скомпилировать этот проект, я получаю 2 ошибки, которые я не могу понять, как решить.
1> initialization.h (6): ошибка C4430: отсутствует указатель типа - предполагается int. Примечание: C ++ не поддерживает default-int 1> initialization.h (6): ошибка C2146: синтаксическая ошибка: отсутствует «,» перед идентификатором «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;
}
Я думаю, что-то не так с включениями, но я не могу найти, где происходит ошибка.
Ваш Initialization.h использует DWORDLONG
который не является частью стандарта C ++. Это означает, что вам нужно определить его, прежде чем вы сможете его использовать.
Однако ваш Initialization.cpp сначала включает Initialization.h, а затем ../Main/EngineStd.h, который определяет специфичные для Windows вещи. Поэтому компилятор жалуется при попытке разобрать включения в порядке, который вы им дали.
Это также причина, почему это работает, когда вы переключаете заказ, чтобы включить ../Main/EngineStd.h перед Initialization.h.
Обычно считается, что включаемые файлы включают в себя то, что они используют сами. Таким образом, ваш Initialization.h должен содержать директиву include для файла, который определяет DWORDLONG
, Ваше текущее решение может работать, но оно доставит вам головную боль, когда вы попытаетесь включить Initialization.h где-то еще и не помните, для каких других включений это требуется.
Других решений пока нет …