我已经在PC上编译并链接了一些带有make的c ++源文件,没有错误。然后我使用相同的sourecefiles和相同的makefile并在Mac上尝试它,但有6个错误。编译器应该是相同的,并以相同的方式解释文件,但显然不是?是不是在Mac上使用的LLVM-g ++与PC上的g ++不同?
所有错误都有此路径:/usr/include/c++/4.2.1/bits/stl_iterator_base_types.h
Mac上的g ++版本4.6.1(PC)和Apple LLVM版本5.0(clang-500.2.76)(基于LLVM 3.3svn)一个错误是:
usr/include/c++/4.2.1/bits/stl_iterator_base_types.h:129:35: error: no type
named 'value_type' in 'std::pair<int, int>'
typedef typename _Iterator::value_type value_type;
~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
答案 0 :(得分:2)
使用相同的源代码和makefile不一定会在不同的平台上产生相同的行为。以下是一些可能导致差异的事情:
char *
与char const *
从您发布的错误“错误:'std :: pair'中没有名为'value_type'的类型”我猜你正在错误地使用标准库并且你正在使用的标准库实现之一让你逃脱了,但另一个却没有。
似乎在您的代码中的某个时刻,您正在使用不符合要求的模板参数来实例化模板,因此在模板实例化的深处某处发生错误。作为该错误消息的一部分,编译器应该为您提供导致它的模板实例的列表。您需要将该跟踪追溯到您的代码,以查看您错误使用的模板。