-1

タイプ multimap の静的メンバーが必要です

クラス宣言の後に静的メンバーを初期化(または定義)する必要があることを確認しました

問題は、宣言したマルチマップを初期化 (定義) するための正しいシンタックスが見つからないことです

これが私のマルチマップ宣言です:

 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 に答える