【发布时间】:2017-10-20 18:26:45
【问题描述】:
解决这个问题可能很简单,但我找不到答案。回答将得到我的感谢和我的眼泪。
基本上,下面的代码在没有模板的情况下也可以正常工作(当然,使用 T 作为原语)但是一旦我添加了模板,它就会说我的参数列表丢失了。我认为这与声明有关,但这些函数没有使用范围解析,至少不是以我熟悉的方式。我如何让它发挥作用?
template<class T>
class Foo
{
public:
Foo(T s, int i) : Data(s), pri(i) {}
//Overload the relational operator so that the priority is compared.
bool operator < (const Foo<T>& n) const { return n.pri < pri; }
T getData() { return Data; }
int getId() { return pri; }
private:
T Data;
int pri;
};
这是主要的
int main(void)
{
set<Foo> s; //These should actually be multiset, but was trying to get it to
s.insert(Foo("C++", 9)); //work as a set before jumping to multiset
s.insert(Foo("Is ", 7));
s.insert(Foo("Fun ", 3));
set<Foo>::iterator p;
for (p = s.begin(); p != s.end(); p++)
{
Foo n = *p;
cout << "Id: " << n.getId() << "\t Data: " << n.getData() << endl;
}
return 0;
}
如果您好奇,该程序应该采用字符串(或其他类型)以及优先级并对优先级进行排序,程序不完整,但我应该在我的程序中使用这个类,但我在将其转换为模板时被绊倒了。
【问题讨论】:
-
Foo n = *p;模板类需要模板参数? -
请注意,C++ 中的编译器错误会告诉您错误发生在哪行。查找错误消息中首次提及您的代码。
标签: c++ list function templates