提问人:J AVENTADOR 提问时间:10/30/2023 最后编辑:MSaltersJ AVENTADOR 更新时间:10/30/2023 访问量:67
声明并实现函数后,main 仍然找不到函数 [duplicate]
After declaring and implementing the function, main still cannot find the function [duplicate]
问:
当我在 main 函数中声明、实现和调用函数时,我的编译器仍然报告外部符号无法解决的错误;我所有的代码都如下;问题详细信息介于“*”之间。
具体的错误语句是:
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.obj
3.LNK2019 无法解析的外部符号 "void __cdecl InsertInOrderThreadTree(void)" (?InsertInOrderThreadTree@@YAXXZ),函数 main 中引用了该符号 DataStructure C:\Users\lenovo\Desktop\Code\Visual Studio\DataStructure\BinaryTree.obj 1
4.LNK2019 无法解析的外部符号 "void __cdecl InOrderThreadTree(void)" (?InOrderThreadTree@@YAXXZ),函数 main 中引用了该符号 DataStructure C:\Users\lenovo\Desktop\Code\Visual Studio\DataStructure\BinaryTree.obj
5.LNK2019 无法解析的外部符号 "void __cdecl Traversal(void)" (?Traversal@@YAXXZ),函数 main 中引用了该符号 DataStructure C:\Users\lenovo\Desktop\Code\Visual Studio\DataStructure\BinaryTree.obj 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
}
我希望有人能回答我的问题。我将不胜感激。
答:
3赞
user12002570
10/30/2023
#1
问题在于,您已将函数声明为非模板,但将它们定义/实现为模板。
为了解决这个问题,您可以将这些函数的定义更改为非模板化,如下所示。
//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
}
评论
void CreateBinaryTree();
template<class T> void CreateBinaryTree() { //implement }