当我在主函数中声明、实现和调用函数时,我的编译器仍然报告无法通过外部符号解决的错误;我的所有代码如下;问题详细信息在“*”之间。
具体错误语句为:
1.LNK2019 无法解析的外部符号 "void __cdecl CreateBinaryTree(void)" (?CreateBinaryTree@@YAXXZ),函数 main 中引用了该符号 DataStructure C:\Users\lenovo\Desktop\Code\Visual、Studio\DataStructure\BinaryTree .obj
2.LNK2019无法解析的外部符号 "void __cdecl ShowBinaryTree(void)" (?ShowBinaryTree@@YAXXZ),函数 main 中引用了该符号 DataStructure C:\Users\lenovo\Desktop\Code\Visual Studio\DataStructure\BinaryTree。对象
3.LNK2019无法解析的外部符号 "void __cdecl InsertInOrderThreadTree(void)" (?InsertInOrderThreadTree@@YAXXZ),函数 main 中引用了该符号 DataStructure C:\Users\lenovo\Desktop\Code\Visual Studio\DataStructure\BinaryTree。对象 1
4.LNK2019无法解析的外部符号 "void __cdecl InOrderThreadTree(void)" (?InOrderThreadTree@@YAXXZ),函数 main 中引用了该符号 DataStructure C:\Users\lenovo\Desktop\Code\Visual Studio\DataStructure\BinaryTree。对象
5.LNK2019无法解析的外部符号 "void __cdecl Traversal(void)" (?Traversal@@YAXXZ),函数 main 中引用了该符号 DataStructure C:\Users\lenovo\Desktop\Code\Visual Studio\DataStructure\BinaryTree。对象 1
#include<bits/stdc++.h>
using namespace std;
#define MaxSize 100
template<class T>
struct LinkNode {
//implement
};
template<class T>
struct ThreadNode {
//implement
};
template<class T>
struct TreeNode {
//implement
};
template<class T>
class MyStack {
//implement
};
template<class T>
LinkNode<T>* root;
template<class T>
ThreadNode<T>* threadNode;
//*************************************************************************************
void CreateBinaryTree();
void ShowBinaryTree();
void InsertInOrderThreadTree();
void InOrderThreadTree();
void InsertInOrderThreadTree();
void Traversal();
int main() {
CreateBinaryTree();
ShowBinaryTree();
Traversal();
InsertInOrderThreadTree();
InOrderThreadTree();
}
//*************************************************************************************
//选择遍历方式
template<class T>
void Traversal() {
//implement
}
//RecursiveTraversal
template<class T>
void preOrder(LinkNode<T>* p) {
//implement
}
template<class T>
void inOrder(LinkNode<T>* p) {
//implement
}
template<class T>
void postOrder(LinkNode<T>* p) {
//implement
}
//nonRecursiveTraversal
template<class T>
void nonRecursivePreOrder(LinkNode<T>* p) {
//implement
}
template<class T>
void nonRecursiveInOrder(LinkNode<T>* p) {
//implement
}
template<class T>
void nonRecursivePostOrder(LinkNode<T>* p) {
//implement
}
template<class T>
void InThread(ThreadNode<T>*& p,ThreadNode<T>*& pre) {
//implement
}
template<class T>
void InOrderThreadTree() {
//implement
}
template<class T>
void InsertInOrderThreadTree() {
//implement
}
template<class T>
void CreateBinaryTree() {
//implement
}
template<class T>
void ShowBinaryTree() {
//implement
}
我希望有人能回答我的问题。我将不胜感激。
问题是你已经声明你的函数为非模板但是定义/实现它们作为模板。
要解决此问题,您可以将这些函数的定义更改为非模板化,如下所示。
//made this non-template by removing template<T>
void InOrderThreadTree() {
//implement
}
//made this non template
void InsertInOrderThreadTree() {
//implement
}
//made this definition non template
void CreateBinaryTree() {
//implement
}