ошибка C4430: отсутствует указатель типа

При попытке скомпилировать этот проект, я получаю 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;
}

Я думаю, что-то не так с включениями, но я не могу найти, где происходит ошибка.

0

Решение

Ваш Initialization.h использует DWORDLONG который не является частью стандарта C ++. Это означает, что вам нужно определить его, прежде чем вы сможете его использовать.

Однако ваш Initialization.cpp сначала включает Initialization.h, а затем ../Main/EngineStd.h, который определяет специфичные для Windows вещи. Поэтому компилятор жалуется при попытке разобрать включения в порядке, который вы им дали.

Это также причина, почему это работает, когда вы переключаете заказ, чтобы включить ../Main/EngineStd.h перед Initialization.h.

Обычно считается, что включаемые файлы включают в себя то, что они используют сами. Таким образом, ваш Initialization.h должен содержать директиву include для файла, который определяет DWORDLONG, Ваше текущее решение может работать, но оно доставит вам головную боль, когда вы попытаетесь включить Initialization.h где-то еще и не помните, для каких других включений это требуется.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]