私は自分の参照用に基本的な BST プロジェクトに取り組んでいます。BST.h、BST.cpp、main.cpp の 3 つのファイルがあります。
BST.h の内部は次のようになります。
#pragma once
class BST {
private:
struct node {
int key; int data; node* left; node* right };
node* root;
node* CreateLeaf(int key, int data);
void AddLeafPrivate(int key, int data, node* newNode);
void PrintInOrderPrivate(node* nodePtr);
public:
BST();
void AddLeaf(int key, int data);
void PrintInOrder();
};
そして、BST.cpp内には、これらすべての関数などの正式な定義があります...例は次のとおりです。
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include "BST.h"
using namespace std;
BST::BST() {
root = NULL;
}
main.cpp ファイルは現在空です。戻り値が 0 の include と main() のみがあります。
このソリューションを構築しようとすると、作成した関数ごとに LNK2005 エラーが発生します。これは、PrintInOrderPrivate 定義のコードを完成させるまで発生しなかったようです。LNK2005 は通常、複数のファイルにまたがる関数の複数の定義によって引き起こされることを知っていますが、BST.h には何も定義せず、プロトタイプのみを定義しています。エラーはすべて次のようになります。
重大度コード 説明 Project File Line Suppression State Error LNK2005 "public: __thiscall BST::BST(void)" (??0BST@@QAE@XZ) already defined in BST.obj BasicBinarySearchTreeReference C:\Users\guita\documents\visual studio 2015\Projects\BasicBinarySearchTreeReference\BasicBinarySearchTreeReference\main.obj 1
解読できない LNK1169 エラーも表示されます。
これらのエラーが発生する理由についての洞察は大歓迎です。私は本当にBSTをよりよく理解しようとしていますが、これは現在私の方法です。
ありがとう!