2016-09-29 27 views
0

我已經看過其他類似的問題,但我並沒有很好地理解答案。我收到此錯誤:未定義對`class :: class()的引用錯誤

在功能main': C:/Users/Danny/ClionProjects/LinkedList/main.cpp:9: undefined reference to LINKLIST ::鏈表()」 collect2.exe:錯誤:LD返回1退出狀態

linkList.cpp:

#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; 
} 

我理解它是與我的文件被鏈接的方式,當我改變的#include linkList.h#包括linkList.cpp在我的主文件它的工作原理這很好,爲什麼呢?我有另一個類似的程序,它是一個完美的二叉搜索樹,並且基本上具有相同類型的設置。所以我的問題是如何解決它?爲什麼會發生?

回答

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

啊。我確信這是自.exe以來的MS名稱謝謝。 – krzaq

+0

你是什麼意思?我正在使用CLion來運行程序。 @Ken YN – djdangerousdick

相關問題