C++中两个标头顺序之间的差异似乎会产生错误
Difference between two header orderings in C++ seems to generate error
我有一个名为File的类,它(与其他类一起)在标头"dmanager1.h"中定义。在"dmanager1.cpp"文件(dmanager1.h文件的实现)中,当我按一个顺序列出标头时,我在尝试与main.cpp一起编译时会遇到错误(main.cpp为空,除了标头调用和空的"int main()"。。。基本上我只是在测试类.h和.cpp文件)。。。如果我在dmanager1.cpp文件中切换标题,我不会得到任何错误。我不明白发生了什么。我得到的错误是:错误:"文件"未命名类型
当我在"dmanager1.cpp"中对标题进行排序时,我得到了错误提示,如下所示:
#include "dmanager1.h"
#include <iostream>
#include <cstring>
如果我把标题切换到:
#include <iostream>
#include <cstring>
#include "dmanager1.h"
我不明白编译错误。第一个订单被解析有趣吗?任何想法都将不胜感激。
编辑:添加了有问题的标题的一部分。。。
#ifndef _dmanager1_h
#define _dmanager1_h
//--------------------
// Forward References
//--------------------
// Node_L, Node_T, and Sector are defined in File: dmanager1a.h
class Node_L;
class Node_T;
class Sector;
class File
{
public:
// Default Constructor
//File();
// Constructor: Allowing "name", "size", and/or "permissions" to be set
// Permissions set to default of 0 == read and write
File(const char * & name, float size = 0, int permissions = 0) : timestamp(11223333) {};
// Default Destructor
~File();
//returns an int corresponding to the date modified (mmddyy)
int get_date_mod(void) const {return timestamp;}
// Return's current level of permission on the File: 0 = read/write, 1 = read only
int get_permission(void) const {return permission;}
// Set's Permission to "level": 0 = read/write, 1 = read only
int set_permission(int level);
private:
// Data members
char * name;
float size_OA;
//function used to update "date modified"
void update_timestamp(void);
// Current permission level of the file: 0 = read/write, 1 = read only
int permission;
//value modified by update_timestamp() and the value returned by get_date_mod(). Date file last edited.
int timestamp;
};
很可能您的dmanager1.h
标头需要iostream
或cstring
定义的内容。
因此,它无法正确解析,编译器也无法理解File
类的声明。
如果你发布你的dmanager1.h
文件,你将能够得到更详细的答案。
请确保每个标头都是完全自给自足的。它需要为它使用的所有内容#include
标头,而不是假设它们将被其他内容包含。每个头都应该工作,即使它是.c文件中唯一包含的头。
我敢打赌,你的dmanager1.h头使用了标准库中的一些东西,而你没有包含它所需要的头。交换标头似乎可以解决问题,但这只是巧合。
您可以做的一个诊断测试是创建一个.c文件,该文件只包含#include "dmanager1.h"
行。试着编译它。如果编译器抛出错误,它应该提供需要包括哪些附加头的提示。
更新:我可以使用您使用g++ -Wall
发布的头的初始部分进行编译,并且我不会收到任何错误或警告。请张贴一个重现问题的样本。
- GCC 警告和 gcc 错误消息之间的区别
- 为什么 2 个双精度值之间的差值计算错误?
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 模板流运算符重载错误:引用初始化无效,与basic_istream和basic_ifstream之间的差异有关
- 类之间的 TypeDef 错误C++
- 错误:ISO C++禁止在指针和整数 [-fallowive] 之间进行比较
- OpenCV 文件存储 - 错误:元素之间的解析错误 (icvYMLParseValue) 缺失
- 树节点之间的最大距离中的运行时错误
- 在结构函数之间传递文件路径 C++ 编辑:修复LNK2019错误
- 作为 int 传递和类内部指针之间的差异给我带来了分段错误
- 通过 Boost Python 在C++对象之间传递共享指针的隔离错误
- 如何修复C++中的"指针和整数之间的比较"错误?
- 特征,制造和cmake之间的问题(可能是cmake错误)
- C++编译错误(有符号和无符号整数表达式之间的比较)
- C++编译错误是由于使用 std::move 时运动构造函数与其他非运动构造函数之间的冲突
- 在两个类似类之间使用reinterpret_cast时错误
- 操作员=在两个std :: chrono :: time_point引起错误之间
- 未定义的行为和格式错误之间的区别,不需要诊断消息
- 运行时错误和逻辑错误之间的区别