2016-09-29 6 views
0

私は他の同様の質問を見ましたが、私は本当に答えをよく理解していませんでした。私はこのエラーを取得しています:機能main': C:/Users/Danny/ClionProjects/LinkedList/main.cpp:9: undefined reference to LINKLISTで`class :: class()エラーへの未定義の参照

を:: LINKLIST()」 collect2.exe:エラー:ldは

linkList.cpp 1つの終了ステータスが返されました:

#include <iostream> 
#include <cstdlib> 
#include "linkList.h" 

using namespace std; 

linkList::linkList() 
{ 
    head = NULL; 
    follow = NULL; 
    trail = NULL; 
} 

void linkList::addNode(int dataAdd) 
{ 
    nodePtr n = new node; 
    n->next = NULL; 
    n->data = dataAdd; 

    if (head != NULL) 
    { 
     follow = head; 
     while (follow->next != NULL) 
     { 
      follow = follow->next; 
     } 
    } 
    else 
    { 
     head = n; 
    } 

} 

void linkList::deleteNode(int nodeDel) 
{ 
    nodePtr delPtr = NULL; 
    follow = head; 
    trail = head; 

    while(follow != NULL) 
    { 
     trail = follow; 
     follow = follow->next; 
     if (follow->data == nodeDel) 
     { 
      delPtr = follow; 
      follow = follow->next; 
      trail->next = follow; 
      delete delPtr; 
     } 
     if(follow == NULL) 
     { 
      cout << delPtr << " was not in list\n"; 
      delete delPtr; // since we did not use delPtr we want to delete it to make sure it doesnt take up memory 
     } 

    } 

} 

void linkList::printList() 
{ 
    follow = head; 
    while(follow != NULL) 
    { 
     cout << follow->data << endl; 
     follow = follow->next; 
    } 


} 

LinkList.h:

struct node { 
    int data; 
    node* next; 
}; 

typedef struct node* nodePtr; 


class linkList 
{ // the linkList will be composed of nodes 

private: 
    nodePtr head; 
    nodePtr follow; 
    nodePtr trail; 

public: 
    linkList(); 
    void addNode(int dataAdd); 
    void deleteNode(int dataDel); 
    void printList(); 
}; 

main.cppに:

#include <cstdlib> 
#include "linkList.h" 


using namespace std; 

int main() { 

    linkList myList; 


    return 0; 
} 

私は私のメインのファイルにlinkList.cppを#includeするの#include linkList.hを変更したときに、私はそれが動作しますが、それは私のファイルがリンクされている方法とは何かを持って理解してなぜこれはいい?私は完璧に動作し、基本的に同じタイプのセットアップを持つバイナリ検索ツリーである、別の同様のプログラムを持っています。だから私の質問は私がそれを修正する方法ですか?どうしてそれが起こっているのですか?

答えて

2

自動的にビルドシステム/ IDEを使用している場合は、linkList.cppをプロジェクトに追加する必要があります。あなたはどちらかを行う必要があります。

  1. g++ -c linkList.cpp -o linkList.o
  2. とは別に、それをコンパイルして、最終的な実行可能ファイルg++ main.cpp linkList.o

か(大規模なプロジェクトのために実行不可能)直接の両方をコンパイルし、コンパイルし、リンクされていますg++ main.cpp linkList.cpp

.cppファイルを含めることは悪い考えであり、これを行う必要はありません。

+1

また、 'collect2.exe'はCygWinを意味し、コマンドラインを使用している場合は' g ++ main.cpp linkList.cpp'です。 –

+0

Ah。私はそれがMSの名前だと確信していました。 – krzaq

+0

それはどういう意味ですか?私はプログラムを実行するためにCLionを使用しています。 @Ken YN – djdangerousdick

関連する問題