在没有对象参数的情况下调用非静态成员函数,C ++节点

时间:2015-11-23 03:47:39

标签: c++

这似乎在本网站上得到了深入介绍,但经过一段时间的搜索后,我似乎无法找到具体问题,因为我收到了无效函数的错误。

我试图编写一个霍夫曼树,并且我正在尝试构建一个最小堆。为了做到这一点,我需要能够交换树中的节点。我一直在第一次调用swapNode的行上收到上述错误。

Node.cpp违规代码

void Node::swapNode(Node &a, Node &b) {
    Node t = a;
    a = b;
    b = t;
}
Node**minHeapify(Node **array, int index) { 
    int root = index;
    int left = 2 * index + 1;
    int right = 2 * index + 2;
    if (array[left]->frequency < array[root]->frequency) {
        root = left;
    }
    if (array[right]->frequency < array[root]->frequency) {
        root = right;
    } 
    if(root != index) {
        Node::swapNode(&array[root], &array[index]);
        minHeapify(array, root);
    }
}

Node.h

#ifndef _listnode_h
#define _listnode_h

#include <string>

class Node {
    public: 
        Node(char character, int frequency, int ascii);
        Node(int frequency);
        Node();
        ~Node();
        int getFrequency();
        char getCharacter();
        std::string getCode();
        Node *getLeft();
        Node *getRight();
        Node **minHeapify(Node *, int);
        void swapNode(Node &a, Node &b);    
        void setCode(std::string s);

//  private:
        int frequency;
        char character; 
        int ascii;
        std::string code;
        int leaf = 0;
        Node* left, *right; 
};

#endif 

我传入的数组是一个树节点数组,我想将它排序到最小堆中。感谢任何和所有帮助。

1 个答案:

答案 0 :(得分:1)

如果你想调用swapNode而不直接在实际对象上调用它(这是合理的)并且你希望它是一个类成员,那么你需要声明函数static。或者您可以使用std::swap