【问题标题】:Why is VC++ Compiler using boost\range\iterator.hpp为什么 VC++ 编译器使用 boost\range\iterator.hpp
【发布时间】:2015-06-09 10:50:00
【问题描述】:

我似乎有一个奇怪的问题,我的项目无法编译。据我所知,这似乎是我希望使用std::iterator 的命名空间的问题。然而,看看这些错误,它们似乎来自它的 boost 对应物。我没有使用using's,我包含了正确的文件,但是 stl 和 boost 的一些文件名使用相同的名称。我不确定这是否会引起歧义。

我在这个实例中使用的唯一 boost 文件是 /algorithm/string.hpp

下面是.cpp 文件中唯一使用迭代器的代码

std::map <ObjIndex, unsigned int> normalModelIndexMap;
std::map <unsigned int, unsigned int> indexMap;

for (unsigned int i = 0; i < indexCount; i++)
{
    ObjIndex* currIndex = &ObjIndices[i];

    unsigned int iNormalModelIndex, iResultModelIndex, iPrevVertexLocation;

    vec3 currPos = vertexList[currIndex->index_Vertex];
    vec2 currTxrPos = vec2(0, 0);
    vec3 currNormal = vec3(0, 0, 0);

    if (hasUVs)
        currTxrPos = uvList[currIndex->index_UV];

    if (hasNormals)
        currNormal = normalsList[currIndex->index_Normal];

    std::map<ObjIndex, unsigned int>::iterator it = normalModelIndexMap.find(*currIndex);

这里是输出日志。

ObjLoader.cpp 1>f:\dev\boost\boost_1_57_0\boost\range\iterator.hpp(69):错误 C2039: 'type' : 不是 'boost::mpl::eval_if_c,boost::range_mutable_iterator>' 1> f:\dev\boost\boost_1_57_0\boost\range\value_type.hpp(26) : 请参阅对类模板实例化的参考 'boost::range_iterator' 正在编译 1> 与 1>
[ 1> T=字符 1> ] 1>
f:\gl_projects\opengl_engine\opengl_engine\opengl_engine\source\engine\util\objloader.cpp(197) :参见类模板实例化的参考 'boost::range_value' 正在编译 1>f:\dev\boost\boost_1_57_0\boost\range\iterator.hpp(69): 错误 C2146: 语法错误:缺少 ';'在标识符“类型”之前 1>f:\dev\boost\boost_1_57_0\boost\range\iterator.hpp(69):错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持 默认整数 1>f:\dev\boost\boost_1_57_0\boost\range\iterator.hpp(69): 错误 C2602:'boost::range_iterator::type' 不是 'boost::range_iterator' 1> 的基类 1>
[ 1> T=字符 1> ] 1>
f:\dev\boost\boost_1_57_0\boost\range\iterator.hpp(69):见 'boost::range_iterator::type' 1> 的声明 1> [ 1> T=字符 1> ] 1>f:\dev\boost\boost_1_57_0\boost\range\iterator.hpp(69): 错误 C2868: 'boost::range_iterator::type' : 非法语法 使用声明;预期的限定名称 1> 和 1>
[ 1> T=char 1> ] 1>c:\程序文件 (x86)\microsoft visual studio 12.0\vc\include\xutility(371): 错误 C2825:“_Iter”:后跟“::”时必须是类或命名空间 1> f:\dev\boost\boost_1_57_0\boost\iterator\iterator_traits.hpp(22):见 引用类模板实例化 'std::iterator_traits' 正在编译 1> 和 1>
………… ========== 全部重建:0 成功,1 失败,0 跳过 ==========

很可能是我疏忽/做了一些愚蠢的事情。但是,我们将不胜感激提供任何有助于加快进度的帮助。

【问题讨论】:

  • 你为什么投反对票?
  • 始终通过查看您看到的第一个错误的原因进行调试。这是违规行。什么东西在那里? f:\gl_projects\opengl_engine\opengl_engine\opengl_engine\source\engine\util\objloader.cpp(197)
  • @XapaJIaMnu:我想这是因为缺少mcve
  • 我已经发布了 objloader.cpp 的代码。文件中只有一次迭代器实例,它是在发布的代码块的底部创建的。但是,类文件没有错误。问题似乎始于 iterator.hpp,由于某种原因,它是一个 boost 文件。
  • @AndrewMcCallum 可能包含搜索路径冲突?你在这个项目中有什么提升的东西吗?

标签: c++ boost compiler-errors iterator std


【解决方案1】:

感谢您的帮助,虽然我发现了问题。它实际上与包含无关,以及objloader.cpp 中的迭代器。我发现问题出在 boost::split() 中,我传入了一个 char 'c' 而不是字符串元素 "c" ....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2019-07-03
    相关资源
    最近更新 更多