2012-10-25 92 views
0

嘿我無法弄清楚如何讓我的模板頭工作。我必須讓我的init構造函數接受一個數組並將其逆轉。因此,舉例來說,如果我有[1,2,3,4]它需要它[4,3,2,1]模板初始化構造函數錯誤

這是我的模板類:

#pragma once 
#include <iostream> 

using namespace std; 

template<typename DATA_TYPE> 
class Reverser 
{ 
private: 
    // Not sure to make this DATA_TYPE* or just DATA_TYPE 
    DATA_TYPE Data; 
public: 
    // Init constructor 
    Reverser(const DATA_TYPE& input, const int & size) 
    { 
     // This is where I'm getting my error saying it's a conversion error (int* = int), not sure 
     // What to make Data then in the private section. 
     Data = new DATA_TYPE[size]; 
     for(int i=size-1; i>=0; i--) 
      Data[(size-1)-i] = input[i]; 
    } 

    DATA_TYPE GetReverse(){ 
     return Data; 
    } 

    ~Reverser(){ 
     delete[] Data; 
    } 

};

所以如果你能告訴我我做錯了什麼,那會很棒。

回答

1

這是因爲當你將數組傳遞給函數時,它將轉換爲指針。您必須使用DATA_TYPE爲指針:

template<typename DATA_TYPE> 
class Reverser 
{ 
private: 
    // Not sure to make this DATA_TYPE* or just DATA_TYPE 
    DATA_TYPE* Data; //pointer 
public: 
    // Init constructor 
    Reverser(const DATA_TYPE* input, const int & size) //pointer 
    { 
     // This is where I'm getting my error saying it's a conversion error (int* = int), not sure 
     // What to make Data then in the private section. 
     Data = new DATA_TYPE[size]; 
     for(int i=size-1; i>=0; i--) 
      Data[(size-1)-i] = input[i]; 
    } 

    DATA_TYPE* GetReverse(){ //Returns Pointer 
     return Data; 
    } 

    ~Reverser(){ 
     delete[] Data; 
    } 
}; 
+0

誒給我一個秒 – wzsun

+0

用法:INT * ARR =新INT [4]; Reverser r(arr,4); –

+0

好的,是的,我錯誤地啓動它,但是當我試圖檢索使用GetReverse()的數據時,我認爲它應該是一個int * result = new int [10]; result = reverseData.GetReverse();然而,我得到的轉換錯誤int int * – wzsun

0

在我看來,像你這個聲明類的一個實例與int,像

Reverser<int> myVar; 

然後Data成員將int類型。然後在構造函數中嘗試分配內存(使用new返回int*)並將其分配給Data成員,但不能將指針指定給非指針。

所以,當你在你的評論寫的,它應該是

DATA_TYPE* Data;