2016-11-18 66 views
3

我在我的C++類中有一個(應該是簡單的)任務。模板T類數組

以下是作業: 創建一個包含兩個私有數據成員的類模板:T * array和int size。該類使用構造函數根據輸入的大小分配數組。有成員函數允許用戶根據大小填充數組。另外,還有一個成員函數可以對數組進行排序並顯示排序的元素。使用析構函數刪除數組。開發main()來創建兩個對象來調用成員函數。結果,第一個對象將保存它的double類型的數組,而另一個將保存它的int類型的數組。

這裏是我想出了,但想出的「不完全型‘T’的分配」的錯誤:

#include <iostream> 
#include <new> 
#include <vector> 
using namespace std; 
template <class T> 
class DynArray { 
protected: 

int size; 
T ** DynamicArray = new T[size]; 

public: 
DynArray(){ 
void CreateArray(){ 
cout << "Enter size of Array: "; 
cin >> size; 
for (int i = 0; i < size; ++i){ 
DynamicArray[i] = new T(); 
} 
for (int i = 0; i<size; i++) { 
cout << "Element " << i << ": "; 
cin >> DynamicArray[i];} 
} 
//Sort Array 
void Sort(T a[], int size) 
{ 
int idx, pass; 
for (pass=0; pass<size; ++pass){ 
for (idx=0; idx<size-1; ++idx){ 
if (a[idx] > a[idx+1]) 
swap(a[idx], a[idx+1]);} 
} 
for (int i=0; i<size; ++i) { 
for (idx = 0; idx<size-1; ++idx) { 
cout << a[idx] << " "; 
} 
} 
} 
void DeleteArray(){ 
for (int i = 0; i < size; ++i){ 
delete DynamicArray[i]; 
} 
delete[] DynamicArray; 
} 
}; 
int main() { 
DynArray<class T>(); 
return 0; 
} 

不知道如果我在我的思路或完整滯後如果我只是缺少一個小元素。任何幫助都很棒。

謝謝@ jblixr和@ user3655463的幫助。在你的提示和幫助之後,我想到了它。 下面是我想出來供參考,如果有其他人正在處理這個問題。

#include <iostream> 
#include <new> 
#include <algorithm> 
using namespace std; 

//Template Class T 
template <class T> 
class DynArray { 
protected: 
    int size; 
    T * DynamicArray; 
public: 
    DynArray(){}; 
    DynArray(size_t s): size(s) { 
     DynamicArray = new T[size]; 
     for (int i = 0; i<size; i++) { 
      cout << "Element " << i << ": "; 
      cin >> DynamicArray[i]; 

     } 
    } 
    //Sort Array 
    void Sort(){ 
     sort(DynamicArray, DynamicArray+size); 
     for (int i=0; i<size; i++) { 
      cout << DynamicArray[i] << endl; 
     } 
    } 

    //Clear Heap 
    ~DynArray() { 
     delete []DynamicArray; 
    } 
}; 

int main() { 
    int sizeOfArry; 
    cout << "Enter size of Array: "; 
    cin >> sizeOfArry; 

    //Use as an int Array; 
    DynArray<int> intArray = DynArray<int>(sizeOfArry); 
    intArray.Sort(); 
} 

回答

0

我想知道這是要創建一個一個維數組或二維數組,你最初的要求表示一維數組,但是您在代碼中使用二維數組。無論如何,我一起玩一維數組。

error: allocation of incomplete type 'T'

T *DynamicArray = new T[size]; 

你正在嘗試做的,是在類的初始化,可以爲靜態數據成員來完成,這是一個C++ 11擴展非靜態數據成員。所以我建議你不要這樣做,因爲你正在學習。您只能聲明成員,並且不要在此初始化。

即使使其爲靜態,也不能分配它,因爲模板類型T僅在對象創建後才知道,因此編譯器不知道在編譯期間將分配的類型。 所以應該只是作爲

T *DynamicArray; 

嵌套函數

C++不支持嵌套函數,學習C++的語法。構造函數和析構函數的

使用

構造函數會做的CreateArray()功能和析構函數會做的DeleteArray()

的functionlaity實例化一個模板類

你應該明確地提模板類將要使用的尖括號內的類型

DynArray<int> intArray; // if you want to use int 
DynArray<float> floatArray; 

您還可以使用您自己的自定義班級,類型爲T,希望您能夠在班級中儘快學會。

DynArray<MyCustomClass> customArray; 

如果您糾正所有這些東西,然後你最終的骨骼會像下面的一個

template <class T> 
class DynArray { 
protected: 
    int size; 
    T *DynamicArray ; 

public: 
    DynArray() { 
     // initailize DynamicArray here 
     // use your CreateArray() code here 
    } 

    void sort() { 
     // your own sort logic 
     // No need to pass the size to this function, its a member function 
    } 

    ~DynArray() { 
     // use your DeleteArray() code here 
    } 
}; 

int main() { 
    DynArray<int> intArray; 
    intArray.sort() 
    return 0; 
} 

簡單,不是嗎? :)

0

從您提供的描述在我看來,你想做某事這樣的:

#include <iostream> 
    #include <algorithm> 

    using namespace std; 
    template <class T> 
    class DynArray { 
    protected: 
    int size; 
    T * DynamicArray; 
    public: 
    DynArray(size_t s): size(s) { 
     DynamicArray = new T[s]; 
    } 

    void CreateArray(){ 
     size_t size; 
     cout << "Enter size of Array: "; 
     cin >> size; 
     if(size > this->size) 
      size = this->size; 
     for (int i = 0; i<size; i++) { 
     cout << "Element " << i << ": "; 
      cin >> DynamicArray[i]; 
     } 
    } 
    //Sort Array 
    void Sort() 
    { 
     std::sort(DynamicArray, DynamicArray+size);                                    
    } 

    DynArray() { 
    delete []DynamicArray; 
    } 
}; 

int main() { 
     DynArray<double> dob(3); 
     DynArray<int> di(3); 
     dob.CreateArray(); 
     di.CreateArray(); 
     dob.Sort(); di.Sort(); 
    }