我在标题.h ++文件中有以下内容:
template<typename N,
typename V = int,
typename C = std::less<N>,
typename A = std::allocator<N>>
class my_class {
public:
...
private:
N* buy_node_( const V& );
...
};
在实现.c ++文件中我有
template <typename N, typename V, typename C, typename A>
typename my_class<N, V, C, A>::N*
my_class<N, V, C, A>::buy_node_( const V& v )
{
...
}
但这给了我错误:
error: prototype for ... does not match any in class ...
但是,如果我这样做,请在标题中:
template<typename N,
typename V = int,
typename C = std::less<N>,
typename A = std::allocator<N>>
class my_class {
public:
...
private:
typedef N node_t;
N* buy_node_( const V& );
...
};
这在实施中:
template <typename N, typename V, typename C, typename A>
typename my_class<N, V, C, A>::node_t*
my_class<N, V, C, A>::buy_node_( const V& v )
{
...
}
它编译得很好。我很好奇为什么我需要typedef?
答案 0 :(得分:0)
该行:
typename my_class<N, V, C, A>::N*
正在尝试引用my_class
中的typedef,但my_class
没有定义这样的typedef。在这种情况下,typename
关键字用于表示&#34;这是一个typedef&#34; (例如typedef T::value
)。
第二个版本适用于node_t
是一个typedef,node_t
和N
是等效的。
由于N
是模板的一部分,您可以简单地说:
N*