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;
    }

};

所以是的,如果你能告诉我我做错了什么,那就太好了。

4

2 回答 2

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;
    }
};
于 2012-10-25T10:05:02.657 回答
0

在我看来,您正在声明此类的一个实例int,例如

Reverser<int> myVar;

然后该Data成员将是 type int。然后,在构造函数中,您尝试分配内存(new返回 a int*)并将其分配给Data成员,但您不能将指针分配给非指针。

因此,正如您在评论中所写,它应该是

DATA_TYPE* Data;
于 2012-10-25T10:05:24.947 回答