0

我有一个名为 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;

};
4

2 回答 2

3

很可能你的dmanager1.h标题需要一些iostreamcstring定义的东西。

结果,它没有被正确解析,编译器不理解你的File类的声明。

如果您发布dmanager1.h文件,您将能够获得更详细的答案。

于 2012-07-11T00:58:50.783 回答
2

确保每个标题都是完全自给自足的。它需要为#include它使用的所有内容添加标题,而不是假设它们会被其他东西包含。即使它是 .c 文件包含的唯一标头,每个标头都应该工作。

我敢打赌,您的 dmanager1.h 标头正在使用标准库中的某些内容,而您没有包含它需要的标头。交换标题似乎可以解决问题,但这只是巧合。

您可以进行的一项诊断测试是创建一个 .c 文件,其中只包含 .c 行#include "dmanager1.h"。尝试编译它。如果编译器抛出错误,它应该提供有关需要包含哪些附加标头的提示。

更新:我可以使用您发布的标头的初始部分进行编译,g++ -Wall并且根本没有收到任何错误或警告。请发布重现问题的示例。

于 2012-07-11T01:08:44.227 回答