-1

我需要一个来自 multimap 类型的静态成员

我检查了静态成员必须在类声明之后初始化(或定义)

问题是我没有找到正确的 sintax 来初始化(定义)我声明的多映射

这是我的多地图声明:

 namespace sctg
 {
        class Buffer : public BufferInterface
        {
           public:
                  ...
           private:

                  static std::multimap<std::string, std::pair<sc_core::sc_time, sc_core::sc_time> >    timeStampPackets; 
       };
 }

我正在使用 C++98。

4

1 回答 1

1

如果您只想定义它,而不是添加任何成员,那么您只需说:

std::multimap<std::string, std::pair<sc_core::sc_time, sc_core::sc_time> > Buffer::timeStampPackets;

在类定义之外,在类的.cpp文件中。而已!

但是,如果您使用 typedef 作为地图类型,生活会更简单:

namespace sctg
{
  class Buffer : public BufferInterface
  {
  public:
    //  ...
  private:
    typedef std::multimap<std::string, std::pair<sc_core::sc_time, sc_core::sc_time> > TimeStampMap;

    static TimeStampMap  timeStampPackets;   // declare
  };
}

.cpp文件中:

namespace sctg
{
  Buffer::TimeStampMap Buffer::timeStampPackets;  // define
}

如果你想在地图中插入一个成员......

如果您使用的是 C++11,您可以像这样初始化成员:

TimeStampMap Buffer::timeStampPackets{ { {}, { sc_core::sc_time_stamp(), sc_core::sc_time_stamp() } } };

如果您不能使用 C++11,那么最好的选择是:

TimeStampMap Buffer::timeStampPackets = getTimeStampPackets();

该函数返回包含您想要的数据的地图:

TimeStampMap getTimeStampPackets()
{
  TimeStampMap result;
  result.insert( TimeStampMap::value_type("", std::pair<sc_core::sc_time, sc_core::sc_time>()) );
  return result;
}
于 2013-07-06T00:34:21.530 回答