0

我在使用 C++ 语言和 IloCplex 框架时遇到了编译问题。

我首先尝试使用 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

错误如下:

在从 AbstractModel.hpp:12 包含的文件中,从 AbstractModel.cpp:7: type.h:6: error: 'typedef' 之前的预期构造函数、析构函数或类型转换 在从 AbstractModel.cpp:7 包含的文件中:AbstractModel.hpp :50: 错误: 'Vector' 没有命名类型 AbstractModel.hpp:51: 错误: 'Vector' 没有命名类型

有什么建议么 ?

PS:Cplex 在这台计算机上工作正常,我有另一个项目具有相同类型的类,可以使用相同的命令完美编译。

4

2 回答 2

1

CustomType.hpp 必须在 AbstractModel.hpp 之前#included,因为 CustomType.hpp 定义了 AbstractModel.hpp 使用的 typedef。

从您粘贴的内容中无法看出是否确实如此。

理想情况下,您的 AbstractModel.hpp 标头将#include "CustomType.hpp"自行完成,而不是依赖于它的完成。

于 2012-02-15T13:37:04.257 回答
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
于 2012-02-15T13:05:46.030 回答