2012-03-19 23 views
1

この問題に関しては多大な疑問がありますが、どれも問題の解決策ではないようです。私はこれが本当にBoost :: Variantの問題だとは思わない。私はちょうど間違った方法でテンプレートを使っていると確信しています。私はコードをコンパイルして自分自身で問題を見ることができるように、コードを削除することができました。かなり単純です。gccからエラーが表示されたままです。私はおそらく何か愚かなことをしているが、私が間違っていることを見ることができない。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; 
}; 
+2

'm_a.data ();'ではありませんか? – Asha

+0

このコードだけではコンパイラエラーは発生しません(少なくともVisual Studio 2010では、コンパイルエラーは発生しません)。エラーを表示するには、実際に 'B :: data'関数をどこかで呼び出すべきです。たとえば、 'main'に' B'の変数を追加し、 'data'を呼び出します。 –

答えて

0

アシャはあなたが書くべきコメントで述べたように:struct B

template <typename T> T data() { return m_a.data<T>(); }; 

テンプレートパラメータが戻り値の型(引数のみに基づいて)から自動的に差し引かれないため、この値が必要です。

+1

今朝起きたとき、私は問題がバットのものであることを知っていました。これは私があまりにも多くの時間を過ごしていた時代のうちの1つに過ぎず、始まったのは本当にばかげた過ちでした。私はそれが私がより良く知っていたので、それは簡単な問題ではなかったと思います。 – Richard

関連する問題