-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 回答