【问题标题】:Initialize static multimap class member初始化静态多图类成员
【发布时间】:2013-07-05 21:46:12
【问题描述】:

我需要一个 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。

【问题讨论】:

  • 这甚至应该做什么?您试图在未初始化的对象上调用成员函数,然后从返回值初始化该对象,该返回值是迭代器而不是映射。而且您不使用static 关键字来定义静态成员。而且您不会插入具有两个值的多图。

标签: c++ static initialization multimap


【解决方案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;
}

【讨论】:

  • 我添加了一个 c++98 选项,但我只是在猜测你想要做什么,因为你的问题很不清楚
  • 我只会定义。所以我使用以下 sintax 来声明:static std::multimap&lt;std::string, std::pair&lt;sc_core::sc_time, sc_core::sc_time&gt; &gt; timeStampPackets; 以及在类声明之外但在命名空间内的以下内容:std::multimap&lt;std::string, std::pair&lt;sc_core::sc_time, sc_core::sc_time&gt; &gt; Buffer::timeStampPackets;。但我收到此错误:“`sctg::Buffer::timeStampPackets 的多重定义”
  • 你会发现,如果你把定义放在头文件中,它必须在程序中只定义一次,所以必须在一个编译一次的.cpp文件中
猜你喜欢
  • 2011-07-18
  • 2015-05-18
  • 2023-03-18
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多