error LNK2001: 无法解析的外部符号 "private: static"
在头文件的类中定义了static变量,则要在cpp文件中对其进行初始化。
若为模板类,还需保存模板格式。
.h
template<class E>
class linkedBinaryTree :public binaryTree<binaryTreeNode<E>> {
private:
binaryTreeNode<E> *root;
int treeSize;
static void(*visit)(binaryTreeNode<E>*);
static void preOrder(binaryTreeNode<E> *t);
static void inOrder(binaryTreeNode<E>*t);
static void postOrder(binaryTreeNode<E>*t);
static void dispose(binaryTreeNode<E> *t) {delete t;}
public:
linkedBinaryTree(binaryTreeNode<E> * t){
root = t;
treeSize = 0;
}
linkedBinaryTree() { root = nullptr; treeSize = 0; }
~linkedBinaryTree() { erase(); };
bool empty(){
return treeSize == 0;
}
int size() { return treeSize; }
void preOrder(void(*theVisit)(binaryTreeNode<E>*)) {
visit = theVisit;
preOrder(root);
}
void inOrder(void(*theVisit)(binaryTreeNode<E>*)) {
visit = theVisit;
inOrder(root);
}
void postOrder(void(*theVisit)(binaryTreeNode<E>*)) {
visit = theVisit;
postOrder(root);
}
void erase() {
postOrder(dispose);
root = nullptr;
treeSize = 0;
}
};
template<class E>
void linkedBinaryTree<E>::preOrder(binaryTreeNode<E>* t)
{
if (t != nullptr) {
linkedBinaryTree<E>::visit(t);
linkedBinaryTree<E>::preOrder(t->leftChild);
linkedBinaryTree<E>::preOrder(t->rightChild);
}
}
其中的static void(visit)(binaryTreeNode)这里,需要在cpp文件中对其进行初始化。
但是其类型很绕。
#include<iostream>
#include<string>
#include<fstream>
#include<stack>
#include"binaryTree.h"
using namespace std;
template<class E>
void(*linkedBinaryTree<E>::visit)(binaryTreeNode<E>*) = nullptr;
变量为指针类型,初始化为nullptr便可。其他类型应该也是如此。