2017-06-01 4 views
1

への呼び出しに該当する機能私は、次のテンプレートクラスを持っている:C++テンプレートクラス:エラー:

template <typename T> class ResourcePool { 
    inline void return_resource(T& instance) { 
     /* do something */ 
    }; 
}; 

その後、私のメイン機能では、私は:

ResoucePool<int> pool; 
pool.return_resource(5); 

そしてI次のエラーが表示されます。

error: no matching function for call to `ResourcePool<int>::return_resource(int)` 

私は間違っていると思いますか?

答えて

1

は、この呼び出し

pool.return_resource(5); 

では、関数の引数として値5でint型の一時オブジェクトが作成されます。

一時オブジェクトは、定数ではない参照でバインドすることはできません。

は、あなたが参照を期待する機能に一時的に渡している

template <typename T> class ResourcePool { 
    inline void return_resource(const T& instance) { 
     /* do something */ 
    }; 
}; 
1

のような機能を宣言します。このバインドはできません。試してみてください:

template <typename T> class ResourcePool { 
    inline void return_resource(const T& instance) { // <--- 
    /* do something */ 
    }; 
}; 

または

template <typename T> class ResourcePool { 
    inline void return_resource(T instance) { // <---- 
    /* do something */ 
    }; 
}; 
関連する問題