2013-07-05 47 views
-1

我需要從類型多重映射初始化靜態多重映射類成員

我檢查靜態成員必須被初始化(或者定義)類聲明之後的靜態成員

的問題是,我沒有找到正確的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。

+0

這是什麼,甚至應該去做?您試圖在未初始化的對象上調用成員函數,然後從作爲迭代器而不是映射的返回值初始化該對象。而且你不使用'static'關鍵字來定義一個靜態成員。而且您不會插入具有兩個值的多圖。 –

回答

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; 
} 
+0

謝謝,但不工作。我正在使用C++ 98。 – Will

+0

我已經添加了一個C++ 98選項,但我只是在猜測你想要做什麼,因爲你的問題很不明確 –

+0

我試圖在這個新版本中更清楚 – Will