我正在进行一项任务,我使用模板创建自己的容器。我需要使用的容器叫做Smaph,它接收两对数字并用它们做各种各样的功能。我只能为这个作业制作一个头文件。我创建了一个单链接的类slink,它接受一个模板参数。
目前,我试图了解模板并学习如何使用它们,所以我有一个非常简单的例子,我希望你可以帮助我。我在单链表列表中有一个push_back函数可以添加到我的模板中。出于某种原因,我无法添加东西到我的slink因为我得到一个编译时错误,说成员函数的使用无效,(push_back),你忘了()?有人可以向我解释为什么我会收到此错误吗? 谢谢!
template <typename T>
class slink {
private:
struct node {
T datum;
struct node *next;
};
node *head, *tail;
public:
slink() : head(0), tail(0) {
}
~slink() {
clear();
}
void push_back(const T &datum) {
node *p = new node;
p->datum = datum;
p->next = 0;
if (!tail)
head = p;
else
tail->next = p;
tail = p;
}
template <typename Tfirst, typename Tsecond>
class Smaph {
public:
Smaph();
~Smaph();
Smaph(const Tfirst a, const Tsecond b) {
std::pair<Tfirst, Tsecond> pair1(a, b);
s.push_back(pair1);
}
private:
slink<std::pair<Tfirst, Tsecond> > s();
};
最后,我主要测试我的程序。我现在要做的就是通过我的Smaph将这两个数字添加到我的单链表中。
int main() {
Smaph<int, double> s(3, 6.3);
}
答案 0 :(得分:3)
slink<std::pair<Tfirst, Tsecond> > s();
这是一个名为s
的函数的声明,它不带参数并返回slink<std::pair<Tfirst, Tsecond> >
。当编译器看到你执行s.push_back(pair1);
时,它会想知道你要对这个糟糕的函数做些什么。删除()
以使其成为数据成员:
slink<std::pair<Tfirst, Tsecond> > s;
答案 1 :(得分:1)
在这一行上你做了:
slink<std::pair<Tfirst, Tsecond> > s();
这是声明一个名为s
的函数,它返回slink<std::pair<Tfirst, Tsecond> >
。但是你在你的一个成员函数中做到了这一点:
s.push_back(pair1);
这是不对的,这就是为什么你的编译器会提醒你无效使用这个成员函数的原因。
要修复,请删除参数:
slink<std::pair<Tfirst, Tsecond> > s;