无效使用的成员函数,你忘记了()

C++ Invalid use of member function, did you forget the ( )?

本文关键字:忘记了 函数 成员 无效      更新时间:2023-10-16

我正在使用模板创建自己的容器。我需要使用的容器称为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);
}
slink<std::pair<Tfirst, Tsecond> > s();

这是一个名为s的函数的声明,该函数不接受参数并返回slink<std::pair<Tfirst, Tsecond> >。当编译器看到你做s.push_back(pair1);时,它想知道你想对那个糟糕的函数做什么。删除()使其成为数据成员:

slink<std::pair<Tfirst, Tsecond> > s;

在这一行您做了:

slink<std::pair<Tfirst, Tsecond> > s();

声明一个名为s的函数,返回slink<std::pair<Tfirst, Tsecond> >。但是你在你的一个成员函数中做了这个:

s.push_back(pair1);

这是不对的,这就是为什么你的编译器会提醒你无效地使用这个成员函数。

要修复,请删除参数:

slink<std::pair<Tfirst, Tsecond> > s;