2012-08-03 56 views
1

我在使用C++中編寫的類時出現問題。我剛剛開始學習C++,我很快找到了正確的方法,但在採用「正確」方式後,我仍然有一個錯誤....所以我提前道歉,如果這只是一些愚蠢的誤解(但我懷疑它...)相關的代碼如下如何使用模板類C++

ArrayList.h

#ifndef ARRAYLIST_H_ 
#define ARRAYLIST_H_ 

#include <string> 

template<class T> 
class ArrayList { 

    private: 
     //Data fields-------------------// 
     T *array; 
     int size; 
     int capacity; 
     bool sorted; 

     //Methods-----------------------// 
     void reallocate(); 
     void reallocate(int newSize); 

     T* mergeSort(T* array, int arraySize); 

    public: 
     //Constructors------------------// 
     ArrayList(); 
     ArrayList(int theSize); 

     //Methods-----------------------// 
     //Operations 
     bool add(T element); 
     bool add(T element, int index); 
     bool add(ArrayList<T> list); 
     bool add(ArrayList<T> list, int index); 
     std:string toString(); 
}; 

#endif /* ARRAYLIST_H_ */ 

ArrayList.cpp

#include "ArrayList.h" 

//~Constructors----------------------------------------------- 
/** 
* Default constructor, 
* creates a 20 element ArrayList, of type T. 
*/ 
template<class T> 
ArrayList<T>::ArrayList() { 

    array = new T[20]; 
    capacity = 20; 
    size = 0; 
} 

//~Methods--------------------------------------------------- 
/** 
* Adds the passed in element to the end of the ArrayList. 
* 
* Runs in O(n) in worst case, where reallocate is called. 
* 
* @param element the element to add to the array. 
*/ 
template<class T> 
bool ArrayList<T>::add(T element) { 

    bool value = false; 

    if (element != NULL) { 
     if ((size - 1) == capacity) { 

      value = reallocate(); 
     } 

     if (value) { 
      array[size] = element; 
      size++; 
     } 
    } 

    return value; 
} 

ArrayListTest.cpp

#include "ArrayList.h" 
#include <iostream> 

int main(void) { 

    using namespace std; 

    ArrayList<int> myList(); 

    myList.add(184387); 
    myList.add(14); 
    myList.add(147); 
    myList.add(1); 
    myList.add(-37); 
    myList.add(584); 
    myList.add(-2147); 
    myList.add(0); 
    myList.add(-75); 
    myList.add(147); 
    myList.add(-37); 
    myList.add(0); 
    myList.add(25); 
    myList.add(187); 
    myList.add(92); 
    myList.add(-17); 

    cout << myList.toString(); 
} 

錯誤發生在TestArrayList.cpp文件中。我在所有添加電話和cout電話上都有錯誤。

上加入號召的錯誤是:

request for member 'add' in 'myList', which is of non-class type 'ArrayList<int>()' 

在COUT調用錯誤是:

Method 'toString' could not be resolved 

任何人都知道我在做什麼錯在這裏?

+0

注,有非標準類具有類似功能:'的std ::矢量' – RiaD 2012-08-03 03:30:38

+0

啊,我知道,我只是寫這封信,感受一下C++和磨練自己的技能....一個LinkedList的下一 – Ethan 2012-08-03 11:46:53

回答

7
ArrayList<int> myList(); 

應該

ArrayList<int> myList; 

您正在運行到最棘手的解析(google一下)。基本上,ArrayList<int> myList();不會聲明變量,但會聲明一個名爲myList的函數,它不接受任何參數並返回ArrayList<int>

一些旁註:

  • 你在構造函數中分配內存,但永遠不會釋放它。你應該有一個析構函數。
  • 這意味着你應該遵守三個原則(谷歌它)
  • 我psyching能力(是的,我讓他們,它保持在低位)告訴我,你的下一個問題將是它的沒有鏈接。 將實現移至標頭。所有翻譯單位都必須對模板進行專門化。
+1

+1在句子中使用psyching。 – 2012-08-03 03:42:32

+1

@Ben我甚至沒有對不起:) :) – 2012-08-03 03:46:27

+1

...然後扔掉所有上面的,並使用'std :: vector'來代替。 – 2012-08-03 06:35:34