2017-05-03 6 views
0

私はクラス内に関数とそのパラメータが渡された関数を持っており、それを関数呼び出しにバインドして関数間で関数を呼び出します。C++テンプレート内クラス

これはコードがすばらしくないことを知っている概念をテストするために一緒に素早くハッキングされています。

class Profiling { 
public: 
    template<class _Fn, class... _Args> GetProfile(_Fn&& _Fx, _Args&&... _Ax); 
    int GetTime(); 
    char Type; 
    int Size; 
private: 
    int StartTime; 
    int EndTime; 
}; 
template<class _Fn, class... _Args> Profiling::GetProfile(_Fn&& _Fx, _Args&&... _Ax) 
{ 
    StartTime = clock(); 
    function<void()> f = _STD bind(_Decay_copy(_STD forward<_Fn>(_Fx)), _Decay_copy(_STD forward<_Args>(_Ax))...); 
    f(); 
    EndTime = clock(); 

} 
int Profiling::GetTime() { 
    return EndTime - StartTime; 
} 

私は

エラー2エラーC4430このエラーが出る:欠落している型指定 - int型と想定。注:C++ はdefault-intをサポートしていません

本当にありがとうございました。

+1

'GetProfile'の戻り値の型はどうでしょうか? – songyuanyao

+0

'_STD'とは何ですか?アンダースコアの先頭に大文字が続く名前は、任意の目的のために実装に予約されています。したがって、あなた自身のコードでそれを使用することは、未定義の動作です。 (そして、もしそれが 'std ::'の#defineなら、どうして***? - それは何のタイピングも保存しません。) –

+0

@MartinBonner MicrosoftのC++標準ライブラリでは、 '_STD'は内部の 'yvals.h'ヘッダに' :: std :: 'と定義されています。 – InternetAussie

答えて

3

あなたの関数の戻り値の型がありません。

template<class _Fn, class... _Args> 
/* return type here */ GetProfile(_Fn&& _Fx, _Args&&... _Ax); 

関数内に何も返さないため、voidが適切な戻り型になります。

+0

ありがとう、私は後に私が実現した後にこれを試してみましたが、今すぐ "エラーエラーLNK1169:1つ以上の多重定義シンボルが見つかりました" –

+0

申し訳ありません。ご協力いただきありがとうございます! –

関連する問題