2011-06-19 112 views
4

我想創建一個鏈接列表的數組而不使用STL。然而,我有困難將數組傳遞給我的鏈接列表...C++「沒有適當的默認構造函數可用」

當我編譯時,我得到上面列出的錯誤。我該如何將數組傳遞給鏈表?謝謝! (有問題的代碼由標記**,請移除如果測試。)

SinglyLinkedList.h

#pragma once 

#ifndef SinglyLinkedList_h 
#define SinglyLinkedList_h 

#include<iostream> 

template <typename Type> 
struct node 
{ 

    Type value; 
    node *next; 
}; 

template <typename Object> 
class SinglyLinkedList 
{ 

private: 
    node<Object> *head; 

public: 
    SinglyLinkedList(); 
    ~SinglyLinkedList(); 
    bool insert(Object x); 
    bool empty(); 
}; 

template <typename Object> 
SinglyLinkedList<Object>::SinglyLinkedList() 
{ 
    this->head = NULL; 
} 

template <typename Object> 
bool SinglyLinkedList<Object>::insert(Object x) 
{ 
    node<Object> *temp = new node<Object>; 
    temp->value = x; 
    temp->next = NULL; 

    if (this->head==NULL) 
    { 
     this->head = temp; 
    } 
    else 
    { 
     node<Object> *S = this->head, *P = S; 

     while ((S->value < temp->value)&&(S != NULL)) 
     { 
      S = S->next; 
      P = S; 
     } 
     if(S == NULL) 
      temp->next = P; 
     else 
     { 
      temp->next = S; 
      P->next = temp; 
     } 
    } 
    return true; 
} 

template <typename Object> 
bool SinglyLinkedList<Object>::empty() 
{ 
    if(this->head == NULL) 
     return true; 
    else 
     return false; 
} 

template <typename Object> 
SinglyLinkedList<Object>::~SinglyLinkedList() 
{ 
    delete this->head; 
} 

#endif 

DynamicArrayClass.h

#pragma once 

#ifndef DynamicArrayClass_h 
#define DynamicArrayClass_h 
#include<iostream> 

template <class T> 
class DynamicArrayClass 
{ 
private: 
    T *array; 
    int size, numItems; 

public: 
    DynamicArrayClass(int newSize) 
    { 
     size = newSize; 
     numItems=0; 
     array = new T[size]; 
    } 

    int GetSize(){ return size;} 
    int GetNumItems() const { return numItems; } 
    bool isEmpty() const { return numItems==0; } 
    bool isFull() const { return numItems==size; } 
    bool addItem (const T &object) 
    { 
     if(isFull()) 
     { 
      return false; 
     } 
     else 
     { 
      array[numItems++] = object; 
      return true; 
     } 
    } 
    const T& getItem(int index) {return array[index];} 
    void makeEmpty() 
    { 
     numItems = 0; 
    } 

    ~DynamicArrayClass() 
    { 
     if(array !NULL) 
      delete [] array; 
    } 


}; 

#endif 

的main.cpp

#include "DynamicArrayClass.h" 
#include "SinglyLinkedList.h" 
#include "stopwatch.h" 

#include<iostream> 

int main() 
{ 
    int totalCapacity = 0; 
    int arrayAddSize = 0; 
    while(totalCapacity < 10000) 
    { 
     if(totalCapacity==0) 
     { 
      DynamicArrayClass<int> *array1 = new DynamicArrayClass<int>(25); 
      totalCapacity = 25; 
      SinglyLinkedList<DynamicArrayClass<int>> *list = new SinglyLinkedList<DynamicArrayClass<int>>(); 

      for(int i = 0; i<25; i++) 
      { 
       array1->addItem(1); 
      }  
      **list->insert(*array1);** 
     } 
     else 
     { 
      arrayAddSize = (totalCapacity/2); 
      totalCapacity = totalCapacity + arrayAddSize; 
      DynamicArrayClass<int> *array = new DynamicArrayClass<int>(arrayAddSize); 
      SinglyLinkedList<DynamicArrayClass<int>> *list = new SinglyLinkedList<DynamicArrayClass<int>>(); 
      for(int i=0; i <arrayAddSize; i++) 
      { 
       array->addItem(1); 
      } 
     } 

    } 
    return 0; 
} 
+3

很多代碼需要轉儲給我們,但是+1不用提問即可使用作業標籤。 –

回答

4

問題出在這部分insert

node<Object> *temp = new node<Object>; 

其中node包含Object。爲了構建這個,Object需要一個默認的構造函數。

也許你可以添加一個構造函數node複製它必須存儲的值?這將使得它,例如:

node<Object> *temp = new node<Object>(x, NULL); 
4
node<Object> *temp = new node<Object>; 

這條線SinglyLinkedList::insert使我承擔錯誤。問題是,你的node結構是這樣的:

template <typename Type> 
struct node 
{ 
    Type value; 
    node *next; 
}; 

Type value;將由new node<Object>調用默認的構造。爲node結構提供適當的構造函數,你應該沒問題。

+0

+1爲正確,並且說明清楚。 – Nawaz

相關問題