0

いくつかのブースト ライブラリ (スレッドと MPI) を組み込んだプロジェクトに取り組み始めました。ブーストをまったく使用していないモジュールの 1 つでブースト 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;
};

}

あなたの親切な助けに感謝します

4

3 に答える 3

0

ヘッダーを次のように変更しました。

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

これはコンパイル、リンク、および実行されます (ただし、出力は生成されません)。

どのような問題が発生しているのか完全にはわかりません...

于 2012-04-10T05:32:38.073 に答える
0

私は同じ問題に遭遇し、それを追跡しました。またはコンパイラ設定にa#define finalを含める前に、ソースのどこかに偶然ありますか? 私の場合、それが問題でした。クラスで C++11 キーワードを使用し、古いコンパイラを使用するときにそれらを定義する必要がありました。boost/multi_index.hpp-Dfinalfinaloverride

multi_indexまたは、どこかで定義した他の識別子が使用されている可能性があります。ここで説明されているように、定義したすべてのマクロをダンプし、それらのいずれかを無効にすると役立つかどうかを確認できます。

于 2012-10-11T18:02:54.193 に答える
0

私も同様の問題に遭遇しました。

でコンパイルエラーが発生しました

multi_index header_holder ファイル。

警告: 最後のキーワードは何とか...何とか...

だから私は

#include <boost/xxxxx> 

他の場所への位置。(例:stdafx.hなど...)これを試してください。

于 2014-04-22T03:39:49.090 に答える