2012-10-25 8 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를 사용해야합니다 : 당신이 그런 다음 Data 멤버 유형 int이 될 것

Reverser<int> myVar; 

처럼 int이 클래스의 인스턴스를 선언하는 것 같은

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 [4] INT를; 반향자 r (arr, 4); –

+0

그래, 내가 잘못 입력했지만 GetReverse()를 사용하여 데이터를 검색하려고 할 때 데이터가 int * result = new int [10]이어야한다고 가정합니다. 결과 = reverseData.GetReverse(); 그러나 나는 int *로 변환 오류 int를 얻을 수 – wzsun

0

그것은 나에게 보인다. 생성자에서 다음 메모리를 할당하려고합니다 (newint*을 반환 함) Data 구성원에 할당하려고 시도하지만 포인터가 아닌 포인터는 할당 할 수 없습니다. 당신이 당신의 의견에 쓰기로

그래서,

DATA_TYPE* Data;