这是我的代码:
#include <iostream>
#include <cstddef>
class alloc
{
};
template <class T, class Alloc = alloc, size_t BufSiz = 0>
class deque
{
public:
deque() { std::cout << "deque" << std::endl; }
};
template <class T, class Sequence = deque<T> >
class stack
{
public:
stack() { std::cout << "stack" << std::endl; }
private:
Sequence c;
friend bool operator== <> (const stack<T, Sequence>&, const stack<T, Sequence> &);
friend bool operator< <> (const stack<T, Sequence>&, const stack<T, Sequence>&);
};
template <class T, class Sequence>
bool operator== (const stack<T, Sequence>&x, const stack<T, Sequence>&y)
{
return std::cout << "opertor == " << std::endl;
}
template <class T, class Sequence>
bool operator < (const stack<T, Sequence> &x, const stack<T, Sequence> &y)
{
return std::cout << "operator <" << std::endl;
}
int main()
{
stack<int> x; // deque stack
stack<int> y; // deque stack
std::cout << (x == y) << std::endl; // operator == 1
std::cout << (x < y) << std::endl; // operator < 1
}
我只是以一种简单的<>表示法告诉编译器我的功能是功能模板。但是我遇到两行错误:朋友只能是类或函数
friend bool operator== <> (const stack<T, Sequence>&, const stack<T, Sequence> &);
friend bool operator< <> (const stack<T, Sequence>&, const stack<T, Sequence>&);
我该怎么解决。
只需使用以下语法:
template<typename T1, typename Sequence1>
friend bool operator== (const stack<T1, Sequence1>&, const stack<T1, Sequence> &);
template<typename T1, typename Sequence1>
friend bool operator< (const stack<T1, Sequence1>&, const stack<T1, Sequence>&);
您需要第一个模板参数不同于T,而第二个模板不同于Sequence,否则您将遮蔽该类的模板参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句