Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Makefile';fdopen:错误的文件描述符';错误_C++_Makefile_G++ - Fatal编程技术网

C++ Makefile';fdopen:错误的文件描述符';错误

C++ Makefile';fdopen:错误的文件描述符';错误,c++,makefile,g++,C++,Makefile,G++,我正在生成一个makefile,并出现以下错误: List.h:10:18: error: calling fdopen: Bad file descriptor 我不知道为什么会这样。 以下是列表的开头。h: #ifndef List_h__ #define List_h__ #include "Data.h" #include "general.h" 其中#include“Data.h”是第10行。Data和general是将依赖项写入makefile的顺序: List.o: List

我正在生成一个makefile,并出现以下错误:

List.h:10:18: error: calling fdopen: Bad file descriptor
我不知道为什么会这样。 以下是列表的开头。h:

#ifndef List_h__
#define List_h__

#include "Data.h"
#include "general.h"
其中#include“Data.h”是第10行。Data和general是将依赖项写入makefile的顺序:

List.o: List.cpp List.h Data.h general.h
    g++ List.cpp $(f)
数据不包括任何内容,general只包括iostream,其他类也不包括iostream

以下是数据。h:

#ifndef Data_h__
#define Data_h__

class Data
{
private:
public:
    //default constructor
    Data() {}
    //destructor
    virtual ~Data()=0;
    /*****************************************************************************
    * function name: operator<
    * The Input: This Data, other Data
    * The output: The operator will compare between two datas. The comparison will
    * be used to create a sorted list.
    *****************************************************************************/
    virtual bool operator<(const Data& other) const =0;
};

Data::~Data() {}

#endif //Data_h__
\ifndef数据__
#定义数据__
类数据
{
私人:
公众:
//默认构造函数
数据(){}
//析构函数
virtual~Data()=0;
/*****************************************************************************
*函数名称:运算符<
*输入:此数据,其他数据
*输出:运算符将比较两个数据。比较将
*用于创建已排序的列表。
*****************************************************************************/

虚拟布尔运算符首先,检查是否使用预编译头。如果是,请删除所有预编译头

如果这不起作用,那么我认为可能会有帮助。在某些版本的g++中,有一个bug,在一个单元中多次包含一个头

查看是否多次包含Data.h


预编译头:查找.gch文件并删除它们

通常,大型项目的每个源文件中都包含许多头文件。编译器反复处理这些头文件所需的时间几乎可以占去构建项目所需的全部时间。为了加快构建速度,GCC允许用户“预编译”头文件;然后,如果构建可以使用预编译的hea,则他们会更快

< >创建一个预编译的头文件,只要需要,就可以用其他文件来编译它,如果需要的话,使用-X选项使驱动程序将其视为C或C++头文件。当它包含的头文件改变时,您可能希望使用像SO这样的工具来保持预编译头的最新。 当在编译中看到#include时,将搜索预编译头文件。当它搜索包含的文件时(请参阅搜索路径)编译器在每个目录中查找预编译头文件,然后再查找该目录中的包含文件。搜索的名称是在#include中指定的名称,并附加了“.gch”。如果无法使用预编译头文件,则将忽略它

例如,如果您有#include“all.h”,并且all.h.gch与all.h位于同一目录中,那么如果可能,将使用预编译头文件,否则将使用原始头文件


如果直接运行
g++
,而不是通过Makefile运行,是否会收到相同的错误消息?我正在使用and。它们是预编译的标题吗?如何删除它们(我需要它们)?我认为我没有多次包含Data.h,因为我正在使用#ifndef和#define来保护我的所有包含。更新了我的答案以定义预编译头。我删除了预编译头,但它似乎仍然不起作用。当我在.h文件中实现数据的方法时,它说,
D的错误-多重定义ata::~Data()'在所有其他类中。当我将实现移动到cpp文件时,它会显示,
数据的多个定义::~Data()'。你知道为什么吗?你会希望实现在.cpp文件中。发布.h和.cpp的新代码。