【问题标题】:Error : "expected constructor, destructor, or type conversion before 'typedef' "错误:“'typedef'之前的预期构造函数、析构函数或类型转换”
【发布时间】:2012-02-15 21:56:49
【问题描述】:

我在使用 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:错误:预期的构造函数、析构函数或“typedef”之前的类型转换 在 AbstractModel.cpp:7 包含的文件中: AbstractModel.hpp:50:错误:“向量”未命名类型 AbstractModel.hpp:51:错误:“向量”未命名类型

有什么建议吗?

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

【问题讨论】:

    标签: c++ compilation cplex


    【解决方案1】:

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

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

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

    【讨论】:

    • 结果保持不变,再次,我有另一个项目,我在其中执行相同的操作,这有效:/
    • 好吧,我刚刚发现了问题,我只是从我以前的项目中复制了定义,并且 > ILOSTLBEGIN 宏缺少一个字符。很抱歉打扰您,感谢您的cmets,它帮助我弄清楚了
    • 你真的需要那个宏吗?而且我没有看到匹配的 ILOSTLEND
    • 好吧,我第一次尝试使用 IloCplex 时,我在编译我的项目时遇到了很多问题,并且与 STL 发生了很多冲突,我通过web,我让它这样,但你说得对,这不是必需的,这个宏只是暗示“使用命名空间 std”包含,根本不需要 ILOSTLEND 宏:)
    • 基本上你在头文件中偷偷使用命名空间std。
    【解决方案2】:

    您的标头中的包含保护错误:

    #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
    

    【讨论】:

    • 是的,它没有任何区别,把它放在第一位只是一个约定,不会影响 typedef。
    猜你喜欢
    • 2018-12-04
    • 2016-03-14
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多