-1

私のクラスは現在このようになっています

    class Hist
    {
    private:
    typedef boost::tuple<double,double,double> tuple;
    typedef boost::shared_ptr<tuple> shared_tuple;
    typedef std::vector<shared_tuple> tuple_vector;
    typedef boost::shared_ptr<tuple_vector> shared_tuple_vector;


    typedef std::map<int,shared_tuple_vector> inner_map;
    typedef boost::shared_ptr<inner_map> shared_inner_map;

    static std::map<std::string, shared_inner_map> stat_History_base;
    static bool CheckStatus(std::string symb );
    };

そして、非常に大きなリンカーエラーを引き起こしているこのメソッドがあります。

 bool Hist::CheckStatus(std::string symb )
{

    std::map<std::string,Hist::shared_inner_map>::iterator found =  stat_History_base.find(symb);
    if(found != stat_History_base.end())
    {
        //Symbol does exist
        return true;
    }
    else
    {
        return false;
    }
}
4

1 に答える 1

4

問題は、静的メンバー変数の定義stat_History_baseを提供していないことです。

これをグローバル名前空間に追加する必要があります。

std::map<std::string, BaseHistory::shared_inner_map_def> 
BaseHistory::stat_History_base;

外部コードからアクセスできるようにするには、shared_inner_map_def公開する必要があることに注意してください (コードでは、現在 として宣言されていますprivate)。

また:

std::list をベクトルに置き換えるまで、最初は正常に機能していました

コードの問題は、静的データ メンバーの定義が不足していることにあるため、これが事実であるとは信じがたいです。

于 2013-03-29T00:09:51.110 に答える