關於這個問題有很多問題,但他們都不是我的問題的解決方案。我不認爲這真的是一個Boost :: Variant問題;我很確定我只是以不正確的方式使用模板。我可以去掉代碼,這樣你就可以編譯它並自己查看問題,這很簡單 - 即使它看起來就在那裏,我仍然從gcc那裏得到一個'no function call'錯誤。我可能在做一些愚蠢的事情,但我似乎無法看到我做錯了什麼。Boost :: Variant - 「沒有匹配的調用函數」
#include <boost/variant.hpp>
typedef boost::variant<int, std::string> Data;
struct A
{
template <typename T> T data() { return boost::get<T>(m_data); };
private:
Data m_data;
};
struct B
{
template <typename T> T data() { return m_a.data(); };
private:
A m_a;
};
int main (int argc, char *argv[])
{
return 0;
};
不應該是'm_a.data();'? –
Asha
2012-03-19 08:34:03
這段代碼本身並不會產生編譯器錯誤(至少在Visual Studio 2010中,但我認爲它不會在任何符合的編譯器中產生錯誤)。爲了顯示錯誤,你應該在某處調用'B :: data'函數。例如在'main'中添加一個變量'B'並且在其上調用'data' ... – 2012-03-19 08:46:44