这似乎在本网站上得到了深入介绍,但经过一段时间的搜索后,我似乎无法找到具体问题,因为我收到了无效函数的错误。
我试图编写一个霍夫曼树,并且我正在尝试构建一个最小堆。为了做到这一点,我需要能够交换树中的节点。我一直在第一次调用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
我传入的数组是一个树节点数组,我想将它排序到最小堆中。感谢任何和所有帮助。
答案 0 :(得分:1)
如果你想调用swapNode
而不直接在实际对象上调用它(这是合理的)并且你希望它是一个类成员,那么你需要声明函数static。或者您可以使用std::swap