您好,提升多索引

hello to boost multi index

本文关键字:索引 您好      更新时间:2023-10-16

我已经开始做一个包含一些提升库(线程和MPI)的项目。我将在其中一个根本不使用提升的模块中使用升压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

我可以知道问题是什么吗? 是不是没有找到它需要的东西? 知道如何解决吗?

编辑:如果您想查看源代码,这里有一个简化版本:

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;
};
}

谢谢你的帮助瓦希德

我修改了你的标题,看起来像这样:

#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;
}

这被编译、链接和执行(尽管没有产生任何输出)。

不完全确定您遇到了什么问题...

我遇到了同样的问题并追踪了它。在编译器设置中包含boost/multi_index.hpp-Dfinal之前,您是否偶然在源代码中的某个地方#define final?就我而言,这就是问题所在,我在类中使用C++11关键字finaloverride,并且在使用较旧的编译器时必须定义它们。

或者,也许是您在某处定义的multi_index使用的其他标识符。您可以按照此处所述转储所有定义的宏,并检查禁用其中一个是否有帮助。

我也遇到了类似的问题。

我在编译中遇到错误

multi_index header_holder文件。

警告:最后一个关键词是废话...等等。。。

所以我改变了

#include <boost/xxxxx> 

位置到其他地方。(例如:stdafx.h等... )试试这个。