2010-12-14 67 views
1

我使用boost :: multi_index視覺sutdio 2010年,這似乎與升壓:: const_mem_fun和虛擬類方法使用時崩潰:visual C++ 2010內部錯誤boost :: multi_index?

class Node 
{ 
public: 
    virtual const std::string& getValue() const {return m_strValue;} 

protected: 
    std::string m_strValue; 

private: 
    struct byValue{}; 
    typedef boost::multi_index_container< 
    boost::shared_ptr<Node>, 
    boost::multi_index::indexed_by< 
     boost::multi_index::random_access<>, 
     boost::multi_index::ordered_non_unique< 
     boost::multi_index::tag<byValue>, 
     boost::multi_index::const_mem_fun<Node, const std::string& , &Node::getValue> 
     > 
    > 
    > NodeList; 
}; 

編譯這個時候,視覺碰撞用這種消息的:

fatal error C1001: An internal error has occurred in the compiler. 
1> (compiler file 'msc1.cpp', line 1420) 
1> To work around this problem, try simplifying or changing the program near the locations listed above. 
1> Please choose the Technical Support command on the Visual C++ 
1> Help menu, or open the Technical Support help file for more information 

但是如果Node :: getValue不是虛擬的,編譯就沒問題。 有沒有辦法解決這個問題?

回答

1

您可以解決這個編譯器錯誤使用user-defined key extractor

class Node 
{ 
public: 
    virtual const std::string& getValue() const {return m_strValue;} 

protected: 
    std::string m_strValue; 

private: 
    struct KeyExtractor 
    { 
     typedef std::string result_type; 

     const result_type& operator()(const boost::shared_ptr<Node>& p) const 
     { 
      return p->getValue(); 
     }   
    }; 

    struct byValue{}; 

    typedef boost::multi_index_container< 
    boost::shared_ptr<Node>, 
    boost::multi_index::indexed_by< 
     boost::multi_index::random_access<>, 
     boost::multi_index::ordered_non_unique< 
     boost::multi_index::tag<byValue>, 
     KeyExtractor 
     > 
    > 
    > NodeList; 
}; 
0

將錯誤報告給Microsoft。

不管代碼有多怪,編譯器都不應該崩潰。