C++初心者です。
二分探索木の中の最大値を求めるコードを作りたいのですが、コンパイル中にcollect2というエラーが発生します。原因と解決方法がわからないのでご教授をお願いしたいと思います。
コードはファイルの一部をコピペしてきたものなので、余計な定義などが入っているかもしれませんが、気にしないでください。
よろしくお願いします。
エラーメッセージ
/tmp/ccBj1FvS.o: 関数 `main' 内: bstmax.cpp:(.text+0x2da): `BinarySearchTree::findLargest() const' に対する定義されていない参照です collect2: エラー: ld はステータス 1 で終了しました
ソースコード
C++
1#include <iostream> 2#include <vector> 3#include <cassert> 4using namespace std; 5 6// 二分木の頂点のクラス 7template <class T> class BinNode { 8private: 9 T key; // 各頂点のキー 10 BinNode<T> *left, *right; // 左子・右子頂点 11public: 12 // コンストラクタでメンバを初期化 13 BinNode(T d, BinNode<T> *l=NULL, BinNode<T> *r=NULL) { 14 key = d; left =l; right=r; 15 } 16 // BinarySearchTree のメンバ関数からこのクラス BinNode のプライベートメンバを操作可能にする 17 friend class BinarySearchTree; 18}; 19 20// 二分探索木のクラス 21class BinarySearchTree { 22 BinNode <int>* root; // 根頂点 23public: 24 BinarySearchTree( ) { root = NULL; }; // 初期状態 25 ~BinarySearchTree( ) { makeEmpty( root ); }; // デストラクタ 26 bool insert( int data ) { return insert( data, root ); }; 27 void show() const { show( root ); cout << endl; }; 28 int findLargest() const; // 29private: 30 bool insert( int data, BinNode<int>* & tree); 31 void makeEmpty( BinNode<int>* tree ); 32 void show( BinNode<int>* tree ) const; 33 int findLargest( BinNode<int>* tree ) const; 34 }; 35 36void BinarySearchTree::makeEmpty( BinNode<int>* tree ) { 37 if( tree !=NULL ) { 38 makeEmpty( tree->left ); 39 makeEmpty( tree->right ); 40 delete tree; 41 } 42} 43 44bool BinarySearchTree::insert( int data, BinNode<int>* & tree ) { 45 if (tree == NULL) { 46 tree = new BinNode<int> (data); 47 return true; 48 } 49 else if (tree->key == data) 50 return false; 51 else if (tree->key > data) 52 return insert(data, tree->left); 53 else 54 return insert(data, tree->right); 55} 56void BinarySearchTree::show( BinNode<int>* tree ) const { 57 if (tree != NULL) { 58 show( tree->left ); 59 cout << tree->key << ". "; 60 show( tree->right ); 61 } 62} 63 64// 二分木全体の最大値を求める関数 65int BinarySearchTree::findLargest( BinNode<int>* tree ) const { 66 if(tree==NULL) return false; 67 else{ 68 int max = tree->key; 69 int lmax = findLargest(tree->left); 70 int rmax = findLargest(tree->right); 71 if (lmax>rmax) max=lmax; 72 else max=rmax; 73 return max; 74 } 75} 76 77int main(void) { 78 BinarySearchTree bst; // 二分探索木 79 int data; // 現在の読み込みデータ 80 81 while ( cin >> data ) 82 bst.insert(data); 83 bst.show(); 84 85 cout << "最大値は " << bst.findLargest() << endl; 86 87 return 0; 88} 89
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/18 08:36
2021/02/18 10:06
2021/02/18 12:45
2021/02/18 13:08 編集
2021/02/20 02:19