错误C4430:缺少类型说明符
error C4430 : missing type specifier
在试图编译这个项目时,我遇到了两个错误,我不知道如何解决。
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时,它会让您头疼,并且不记得它需要其他哪些包含。
相关文章:
- 缺少类型说明符,显式类型为"缺少错误"
- 与 tesseract::TessBaseApi() 相关的 Tesseract-OCR 出错(预期的类型说明符)
- 为什么转换函数声明不需要至少一个定义类型说明符
- C++需要所有声明的类型说明符和预期的非限定 id(需要调试帮助)
- printf 数据类型说明符复杂问题
- C++错误:"class name"之前的预期类型说明符
- 缺少类型说明符和另一个问题
- 缺少类型说明符 - 假定为 int.注意 c++ 不支持 default-int
- 错误:C4430:缺少类型说明符-假定为int.注意:C++不支持default-int
- 在C++中出现错误之前,无效使用了不完整的类型和所需的类型说明符
- 缺少类型说明符 - int 假定 声明静态成员后出错
- 不能在类型说明符中定义联合
- 没有带有字符串数组的存储类或类型说明符
- 警告:函数使用不带尾随返回类型的'auto'类型说明符
- 仅为某些模板专用化定义转换运算符:预期类型/预期类型说明符
- 在 C++ 中出现unique_ptr错误之前的预期类型说明符
- 有没有办法将类型说明符存储在变量中
- C 期望类对象的类型说明符
- 是无符号的int"简单类型说明符"
- 在 vscode 上编译错误.类型说明符是 C++11 扩展