你好,提升多指数
Posted
技术标签:
【中文标题】你好,提升多指数【英文标题】:hello to boost multi index 【发布时间】:2012-04-10 02:56:34 【问题描述】:我已经开始研究一个包含一些 boost 库(线程和 MPI)的项目。 我将在其中一个根本不使用 boost 的模块中使用 boost multi_index。仅供参考,这个项目之前没有使用 boost multi index)
只要我尝试包含
升压/multi_index_container.hpp
到文件并构建项目,我收到了一些错误,从以下开始:
Building CXX object CMakeFiles/SimMobility.dir/main.cpp.o
/usr/bin/c++ -fmessage-length=0 -DBOOST_NO_HASH -O0 -g -I/usr/include/postgresql -I/usr/include/soci -I/usr/include/soci/postgresql -I/usr/include/xsd -I/home/vahid/workspace/Basic__Multi_index -o CMakeFiles/SimMobility.dir/main.cpp.o -c /home/vahid/workspace/Basic__Multi_index/main.cpp
In file included from /usr/include/boost/multi_index/detail/node_type.hpp:22:0,
from /usr/include/boost/multi_index/detail/index_base.hpp:21,
from /usr/include/boost/multi_index/detail/base_type.hpp:21,
from /usr/include/boost/multi_index_container.hpp:33,
from /home/vahid/workspace/Basic__Multi_index/geospatial/RoadNetwork.hpp:10,
from /home/vahid/workspace/Basic__Multi_index/main.cpp:25:
/usr/include/boost/multi_index/detail/header_holder.hpp:41:16: error: expected unqualified-id before ‘)’ token
/usr/include/boost/multi_index/detail/header_holder.hpp: In constructor ‘boost::multi_index::detail::header_holder<NodeTypePtr, Final>::header_holder()’:
/usr/include/boost/multi_index/detail/header_holder.hpp:35:32: error: expected primary-expression before ‘)’ token
我可以知道问题是什么吗?是cmake没有找到它需要的东西吗?知道如何解决吗?
编辑: 如果您想查看源代码,这里有一个简化版本:
RoadNetwork.hpp:
#pragma once
#include <iostream>
#include <vector>
#include <set>
#include <boost/multi_index_container.hpp> //causing problem!!!!!!!
namespace geo class Links_pimpl;
namespace sim_mob
//Forward declarations
class Node;
class UniNode;
class MultiNode;
class Point2D;
class Link;
namespace aimsun
//Forward declaration
class Loader;
//typedef multi_index_container<
//sim_mob::Link,
// indexed_by<
// random_access<>,
//// ordered_unique< member<sim_mob::Link, std::string, &sim_mob::Link::linkID> >
// >
//> Link_m;
class RoadNetwork
public:
RoadNetwork() drivingSide=DRIVES_ON_LEFT; //TEMP
sim_mob::Node* locateNode(const sim_mob::Point2D& position, bool includeUniNodes=false, int maxDistCM=100) const;
private:
std::vector<sim_mob::MultiNode*> nodes;
std::vector<sim_mob::Link*> links;
std::vector<sim_mob::MultiNode*>& getNodesRW() return nodes;
std::set<sim_mob::UniNode*>& getUniNodesRW() return segmentnodes;
std::vector<sim_mob::Link*>& getLinksRW() return links;
friend class sim_mob::aimsun::Loader;
friend class geo::Links_pimpl;
;
感谢您的热心帮助 虚无
【问题讨论】:
水晶球有点云里雾里,但根据我对你没有贴的源代码的查看和阅读能力,很明显错误在第42行! @JerryCoffin 很抱歉以这种方式提出我的问题。我别无选择。我担心发布源代码只会增加复杂性。你是说图书馆的第42行吗? (/usr/include/boost/multi_index/detail/header_holder.hpp ?) 开个玩笑——42 是《银河系漫游指南》中“生命、宇宙和一切的答案”。这是我的说法,根据您发布的内容,我们绝对无法猜测真正的问题。将问题缩小到仍然可以编译并仍然演示您所看到的问题的最小程序,然后将其包含在您的帖子中。 @JerryCoffin 好的 :) 。希望我现在得到你。我刚刚发布了代码。如果我只是在不包含 boost 多索引库的情况下构建它,它编译没有问题。 【参考方案1】:我将您的标题修改为如下所示:
#pragma once
#include <iostream>
#include <vector>
#include <set>
#include <boost/multi_index_container.hpp> //causing problem!!!!!!!
using boost::multi_index_container;
namespace geo class Links_pimpl;
namespace sim_mob
//Forward declarations
class Node;
class UniNode;
class MultiNode;
class Point2D;
class Link;
namespace aimsun
//Forward declaration
class Loader;
//typedef multi_index_container<
//sim_mob::Link,
// indexed_by<
// random_access<>,
// ordered_unique< member<sim_mob::Link, std::string, &sim_mob::Link::linkID> >
// >
//> Link_m;
class RoadNetwork
int drivingSide;
enum side DRIVES_ON_LEFT, DRIVES_ON_RIGHT;
public:
RoadNetwork() drivingSide=DRIVES_ON_LEFT; //TEMP
sim_mob::Node* locateNode(const sim_mob::Point2D& position, bool includeUniNodes=false, int maxDistCM=100) const;
private:
std::vector<sim_mob::MultiNode*> nodes;
std::vector<sim_mob::Link*> links;
std::set<sim_mob::UniNode*> segmentnodes;
std::vector<sim_mob::MultiNode*>& getNodesRW() return nodes;
std::set<sim_mob::UniNode*>& getUniNodesRW() return segmentnodes;
std::vector<sim_mob::Link*>& getLinksRW() return links;
friend class sim_mob::aimsun::Loader;
friend class geo::Links_pimpl;
;
然后我将它包含在一个实例化 RoadNetwork 对象的小文件中:
#include <iostream>
#include "roadnetwork.hpp"
int main()
sim_mob::RoadNetwork roads;
return 0;
编译、链接和执行(尽管没有产生输出)。
不完全确定您遇到了什么问题...
【讨论】:
哦,谢谢。我现在不在办公室。我会进行更改,并会在早上第一时间告诉您结果。 嗨,我回来了。是的,它通过普通命令行编译。正如我所提到的,cmake 很容易导致问题。有什么解决办法吗? @rahman:鉴于我无法复制问题,不,我没有太多的解决方案。【参考方案2】:我遇到了同样的问题并追踪了它。在您的编译器设置中包含boost/multi_index.hpp
或-Dfinal
之前,您的源代码中是否偶然有#define final
?就我而言,这就是问题所在,我在我的类中使用了 C++11 关键字 final
和 override
,并且在使用旧编译器时必须定义它们。
或者,也许它是您在某处定义的multi_index
使用的其他标识符。您可以按照here 的描述转储您定义的所有宏,并检查禁用其中一个是否有帮助。
【讨论】:
【参考方案3】:我也遇到过类似的问题。
我在
中遇到编译错误multi_index header_holder 文件。
警告:最后的关键词是 blah... blah...
所以我改了
#include <boost/xxxxx>
定位到其他地方。 (例如:stdafx.h 等...) 试试这个。
【讨论】:
以上是关于你好,提升多指数的主要内容,如果未能解决你的问题,请参考以下文章
你好,去年你提问的 “如何实现ABAP ALV多表头” 是怎么解决的
你好,博客园!!第一弹~局域网下的简易聊天室,socket与多线程简结