2012-02-15 2 views
0

У меня проблема с компиляцией с использованием языка C++ и структуры IloCplex.Ошибка: «ожидаемый конструктор, деструктор или преобразование типа до« typedef »

Я первый попытался скомпилировать весь проект с помощью Makefile, но я получил неожиданное сообщение об ошибке, с вызовом заголовка класса AbstractModel, с тем, чтобы гарантировать, что эта ошибка не связана с другим файлом, я решил просто скомпилировать этот класс с помощью этой команды:

g++ -o AbstractModel.o -c -I/path/to/cplex/include -I/path/to/concert/include -DIL_STD AbstractModel.cpp

Тогда я понял, что я получил то же самое сообщение об ошибке, вот AbstractModel класс:

http://pastebin.com/B9YiqKUS

и класс type.h:

http://pastebin.com/trQ6BDBK

Ошибка следующие:

In file included from AbstractModel.hpp:12, from AbstractModel.cpp:7: type.h:6: error: expected constructor, destructor, or type conversion before ‘typedef’ In file included from AbstractModel.cpp:7: AbstractModel.hpp:50: error: ‘Vector’ does not name a type AbstractModel.hpp:51: error: ‘Vector’ does not name a type

Любые предложения?

P.S: Cplex отлично работает на этом компьютере, у меня есть другой проект с тем же классом, который отлично компилируется с той же командой.

ответ

1

CustomType.hpp должен быть #included до того AbstractModel.hpp, поскольку CustomType.hpp определяет, что использует определения типов AbstractModel.hpp.

Невозможно увидеть, что вы вставили, действительно ли это так.

В идеале ваш заголовок AbstractModel.hpp будет сам, а не полагаться на его выполнение.

+0

Результат остался прежним, и снова у меня есть другой проект, в котором я делаю ту же операцию, и это работает:/ – Faylixe

+0

Ну, я только что нашел проблему, я просто скопировал определение из моего предыдущего проекта и пропал символ для > ILOSTLBEGIN макрос. Извините, что беспокоило вас, и спасибо за ваши комментарии, это помогло мне разобраться в – Faylixe

+0

, вам действительно нужен этот макрос? И я не вижу соответствия ILOSTLEND – CashCow

0

Вы включаете охранники в заголовке вашего ошибаются:

#ifndef CUSTOM_TYPE_H 

     typedef IloNumArray Vector; 
     typedef IloArray<IloNumArray> Matrix; 
     typedef IloNumVarArray VariableVector;  
     typedef IloArray<IloNumVarArray> VariableMatrix;  

     #define CUSTOM_TYPE_H //This should be just under the #ifndef, not here. 
#endif 
+3

не имеет значения. – CashCow

+0

Да, это не имеет никакого значения, положив его сначала, это просто соглашение и не влияет на typedef. – Faylixe

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

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