我遇到的错误:此声明中没有存储类或类型说明符

错误:此声明中没有存储类或类型说明符

情况描述:

今天在写程序的时候遇到了这个错误,原因很简单,就是在头文件中声明类的时候,函数的声明写错了,例如:

class a
{
	a(); //构造函数
	~a();//析构函数
	/******************************************
	int max( int A , int B);//一、正确的声明方法,定义写在.cpp文件中
	
	int a::max( int A , int B )//二、直接定义的方法,也是正确的
	{
		if ( A > B ) return A;
		return B;
	};
	******************************************/
	int a::max( int A , int B );//错误的声明方法会导致.cpp文件中函数定义部分会出现错误:此声明中没有存储类或类型说明符
	
	
}

以上就是我对该问题的看法,若有疏漏之处,还请您指出,大家共同进步!

严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0276 后面有“::”的名称一定是类名命名空间名 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 100 错误(活动) E0135 命名空间 "std" 没有成员 "string" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 100 错误(活动) E0135 命名空间 "std" 没有成员 "string" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 100 错误(活动) E0135 命名空间 "std" 没有成员 "string" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 100 错误(活动) E0130 应输入“{” Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 101 错误(活动) E0276 后面有“::”的名称一定是类名命名空间名 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 105 错误(活动) E0276 后面有“::”的名称一定是类名命名空间名 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 109 错误(活动) E0020 未定义标识符 "DataParam" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 109 错误(活动) E0020 未定义标识符 "param" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 109 错误(活动) E0065 应输入“;” Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 110 错误(活动) E0276 后面有“::”的名称一定是类名命名空间名 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 133 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 134 错误(活动) E0065 应输入“;” Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 134 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 135 错误(活动) E0065 应输入“;” Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 135 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 136 错误(活动) E0065 应输入“;” Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 136 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 138 错误(活动) E0065 应输入“;” Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 138 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 139 错误(活动) E0065 应输入“;” Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 139 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 140 错误(活动) E0065 应输入“;” Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 140 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 144 错误(活动) E0065 应输入“;” Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 144 错误(活动) E0169 应输入声明 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 145 错误(活动) E0169 应输入声明 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 146 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 151 错误(活动) E0079 应输入类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 151 错误(活动) E0020 未定义标识符 "indexCount" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 151 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 152 错误(活动) E0020 未定义标识符 "indexCount" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 152 错误(活动) E0020 未定义标识符 "GLushort" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 152 错误(活动) E0020 未定义标识符 "GLushort" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 153 错误(活动) E0169 应输入声明 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 155 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 165 错误(活动) E0020 未定义标识符 "stride" Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 165 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 168 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 169 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 170 错误(活动) E0077 此声明没有存储类类型说明符 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 171 错误(活动) E0169 应输入声明 Demo08 E:\C++\2520636143-陈柔-实验3-4\Demo08\Sphere.cpp 172
最新发布
11-15
<think>好的,我现在需要帮助用户解决他们遇到的C++编译错误,具体是关于`std::filesystem`命名空间不存在以及第八行的“此声明没有存储类类型说明符”的问题。首先,我得回忆一下之前的对话,用户之前的问题是关于`std`命名空间缺少`filesystem`成员,而我已经给出了解决方案,包括设置C++17标准、链接库、检查头文件等。现在用户的新问题可能是在应用之前的建议后仍然出现错误者有新的错误出现。 首先,用户提到了两个错误:一是命名空间`std`没有成员`filesystem`,二是第八行的声明缺少存储类类型说明符。我需要分别分析这两个问题的可能原因。 对于第一个错误,`std`没有`filesystem`成员,通常是因为编译器没有启用C++17更高版本,者头文件没有正确包含。根据之前的回答,用户需要确保项目属性中设置了C++17标准,并且包含了正确的头文件`<filesystem>`,而不是旧的实验性版本。此外,检查MSVC工具集版本是否支持C++17,以及Windows SDK是否足够新。另外,可能需要链接文件系统库,尤其是在旧版本的编译器中。 第二个错误“此声明没有存储类类型说明符”通常发生在函数体外进行了变量函数的声明,而没有正确的结构。比如,在全局作用域命名空间作用域中,直接写了一个变量声明没有类型说明符者在类定义外部错误地放置了函数定义。需要用户检查第八行的代码,看看是否有变量函数声明缺少了类型者是否在函数体外错误地进行了某些操作。 现在结合用户提供的引用内容,引用[1]中的`manipulateFile`函数使用了`std::filesystem::path`,并演示了文件的创建、读写和删除。引用[2]提到了`std::basic_filebuf`的相关内容,特别是打开文件的方法,其中使用了`std::filesystem::path`作为参数。这可能意味着用户的代码中涉及到了文件操作,并且可能在使用这些类方法时出现了问题。 用户当前的错误可能出现在代码的第八行,比如可能在函数体外声明了一个变量而没有指定类型者函数定义的位置不正确。例如,用户可能在全局作用域中直接写了一个语句,而没有将其放在函数体内。比如: ```cpp #include <filesystem> namespace fs = std::filesystem; // 正确 fs::path myPath; // 正确,全局变量声明 int main() { // 正确 } void myFunction() { fs::create_directory("test"); // 正确 } fs::path anotherPath = "test"; // 正确,但有初始化可能需要在函数体内,者在C++17之后允许内联初始化 ``` 但如果用户这样写: ```cpp #include <filesystem> namespace fs = std::filesystem; fs::path myPath; myPath = "test"; // 错误:在函数体外赋值,缺少存储类说明符 ``` 这里在全局作用域中对`myPath`进行赋值,而没有在函数体内,会导致编译错误。正确的做法是在函数内部进行赋值,者在声明时初始化。 另外,如果用户在使用`std::filesystem`的功能时,忘记包含头文件,没有正确使用命名空间别名,也可能导致问题。例如,未包含`<filesystem>`,错误地使用了`std::experimental::filesystem`。 此外,检查用户的代码是否在函数体外有函数定义的错误,例如: ```cpp void myFunction() { // ... } myFunction(); // 错误:在函数体外调用函数,缺少存储类说明符 ``` 这种情况下,函数调用必须放在函数体内,比如`main`函数中。 现在需要将这些问题整理成解决方案,分步骤指导用户检查代码结构、包含头文件、设置编译器选项等。同时,结合之前的回答,提醒用户确认C++标准版本是否正确,MSVC工具集是否更新,以及是否需要链接库。 可能还需要用户提供第八行的代码片段,以便更准确地诊断问题,但由于用户没有提供,我需要基于常见情况给出建议。例如,第八行可能是尝试在类定义外部声明变量而没有类型者在函数体外执行语句。 总结,解决方案应包括: 1. 确认C++17标准启用。 2. 包含正确的头文件。 3. 检查代码结构,确保声明和定义在正确的作用域内。 4. 验证MSVC工具集和Windows SDK版本。 5. 示例代码演示正确用法。 6. 相关问题引导用户进一步排查可能的问题。 需要确保回答结构清晰,分步骤说明,并给出代码示例,帮助用户理解如何修正错误。</think>针对C++代码中出现的`std::filesystem`命名空间缺失和**"此声明没有存储类类型说明符"**错误,以下是分步解决方案: --- ### 一、命名空间`std`缺少`filesystem`成员的修复方案 #### 1. 核心验证流程 ```mermaid graph TD A[编译报错"std::filesystem不存在"] --> B{检查C++标准版本} B -->|低于C++17| C[升级到C++17模式] B -->|已启用C++17| D{检查头文件包含} D -->|使用experimental头文件| E[替换为<filesystem>] D -->|正确包含<filesystem>| F[验证MSVC工具集版本] F -->|低于VS2017 15.7| G[升级VS工具集] F -->|版本符合要求| H[检查Windows SDK] ``` #### 2. 具体实施步骤 1. **强制启用C++17标准** - 项目属性 → **C/C++ → 语言 → C++语言标准** → 选择`ISO C++17 标准 (/std:c++17)` - 预处理器定义中添加`_HAS_CXX17=1`[^4] 2. **规范头文件使用** ```cpp // 正确方式 #include <filesystem> // C++17标准头文件 namespace fs = std::filesystem; // 错误方式(旧版实验性实现) #include <experimental/filesystem> // 已废弃 namespace fs = std::experimental::filesystem; // 不可用 ``` 3. **验证MSVC工具集** - 通过`_MSC_VER`宏检测编译器版本: ```cpp #if _MSC_VER < 1914 // VS2017 15.7+ #error "需要MSVC 2017 15.7更新版本" #endif ``` --- ### 二、"此声明没有存储类类型说明符"错误解析 #### 1. 典型错误场景分析 ```cpp // 错误示例:在全局作用域直接调用函数 #include <filesystem> namespace fs = std::filesystem; fs::path p = "data.txt"; // 正确声明 fs::create_directory(p); // 错误!全局作用域不能执行函数调用 int main() { // 正确位置:函数体内执行操作 fs::create_directory(p); // √ } ``` #### 2. 错误根源与修复方案 | 错误类型 | 错误代码示例 | 修正方案 | |---------|-------------|---------| | 函数体外执行语句 | `int x; x=5;` | 将赋值操作移至函数体内 | | 类声明错误 | `class A{int a; a=0;};` | 使用构造函数初始化成员变量 | | 缺少返回类型 | `func() { return 0; }` | 明确声明返回类型:`int func()` | #### 3. 结合`std::filesystem`的典型修复案例 ```cpp // 错误代码:第8行出现声明错误 #include <filesystem> namespace fs = std::filesystem; fs::path filePath; // 正确声明 filePath = "test.txt"; // 第8行错误!全局作用域不能直接赋值 // 修正方案:在函数体内初始化 int main() { filePath = "test.txt"; // √ 正确位置 fs::remove(filePath); // √ 文件操作在函数体内 } ``` --- ### 三、完整验证代码模板 ```cpp #include <iostream> #include <fstream> #include <filesystem> // 关键头文件 namespace fs = std::filesystem; // 命名空间别名 // 正确全局声明 const fs::path logFile = "system.log"; void manipulateFile(const fs::path& p) { // 正确函数声明 std::ofstream ofs(p); ofs << "File created via C++17 filesystem\n"; ofs.close(); } int main() { // 正确作用域内的操作 if (!fs::exists(logFile)) { fs::create_directory("logs"); // 创建目录 manipulateFile(logFile); // 调用函数 } return 0; } ``` --- ### 四、编译环境验证清单 1. **MSVC工具集版本** - 开发者命令提示符执行`cl /Bv`查看版本 - 要求:`19.14`(VS2017 15.7)更高 2. **Windows SDK版本** - 项目属性 → **常规 → Windows SDK版本** → 选择`10.0.17134.0`更新 3. **预处理器定义检查** - 确保未定义`_DISABLE_EXTENDED_ALIGNED_STORAGE`等冲突宏 --- ### 五、扩展问题排查 1. **混合使用新旧标准库** - 避免同时包含`<filesystem>`和`<experimental/filesystem>` 2. **路径分隔符问题** ```cpp fs::path winPath = "C:\\Data\\test"; // 需要转义符 fs::path unixPath = "/var/log/app"; // POSIX格式 ``` 3. **Unicode支持配置** - 项目属性 → **C/C++ → 命令行** → 添加`/utf-8`编译选项 - 使用`std::filesystem::path::u8string()`处理UTF-8路径 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值