2012-06-04 3 views
0

Делаю Makefile, и получать эту ошибку:Makefile «fdopen: Плохой дескриптор файла» ошибка

List.h:10:18: error: calling fdopen: Bad file descriptor 

Я понятия не имею, почему это происходит. Вот начало list.h:

#ifndef List_h__ 
#define List_h__ 

#include "Data.h" 
#include "general.h" 

где #include "Data.h" является 10-й линии. Данные, а затем вообще порядок, в котором зависимости записываются в Makefile:

List.o: List.cpp List.h Data.h general.h 
    g++ List.cpp $(f) 

данные не включают в себя ничего, и вообще включает в себя только iostream, и никакой другой класс также не включает iostream.

Вот Data.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__ 

я изначально имел тривиальную реализацию деструктора Дейтов после = 0, и я также пытался переместить тривиальные реализации конструктора и деструктор в .cpp файл. Все вышесказанное не сработало. Пожалуйста, помогите - я застрял в этом файле в течение нескольких часов, и это сводит меня с ума! Благодаря!

+0

вы получите то же самое сообщение об ошибке при запуске '' г ++ напрямую, а не через Makefile ли? –

ответ

1

Сначала проверьте, используете ли вы предварительно скомпилированные заголовки. Если это так, удалите все предварительно скомпилированные заголовки.

Если это не сработает, я думаю, this может помочь. В некоторой версии g ++ есть ошибка, включающая заголовок несколько раз в одном блоке.

Посмотрите, если вы ввели Data.h несколько раз.


Предварительно скомпилированные заголовки: найдите файлы .gch и удалите их.

Precompiled header

Often large projects have many header files that are included in every source file. The time the compiler takes to process these header files over and over again can account for nearly all of the time required to build the project. To make builds faster, GCC allows users to `precompile' a header file; then, if builds can use the precompiled header file they will be much faster.

To create a precompiled header file, simply compile it as you would any other file, if necessary using the -x option to make the driver treat it as a C or C++ header file. You will probably want to use a tool like make to keep the precompiled header up-to-date when the headers it contains change.

A precompiled header file will be searched for when #include is seen in the compilation. As it searches for the included file (see Search Path) the compiler looks for a precompiled header in each directory just before it looks for the include file in that directory. The name searched for is the name specified in the #include with `.gch' appended. If the precompiled header file can't be used, it is ignored.

For instance, if you have #include "all.h", and you have all.h.gch in the same directory as all.h, then the precompiled header file will be used if possible, and the original header will be used otherwise.

+0

Я использую и . Являются ли они прокомпилированными заголовками? Как я могу удалить их (мне они нужны)? Я не думаю, что я включаю Data.h несколько раз, так как я защищаю все свои включения, используя #ifndef и #define. – nodwj

+0

Обновлен мой ответ для определения предварительно скомпилированных заголовков. –

+0

Я удалил предварительно скомпилированные заголовки, но он все еще не работает. Когда у меня есть реализация методов данных в файле .h, он говорит: ошибка - множественное определение 'Data :: ~ Data() 'во всех других классах. Когда я переношу реализации в файл cpp, он говорит о множественном определении 'Data :: ~ Data(). Любые идеи почему? – nodwj

Смежные вопросы