0

テンプレート ヘッダーを機能させる方法がわかりません。配列を取り込んで反転させるには、初期化コンストラクターを取得する必要があります。たとえば、[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メンバーのタイプは になりますintnewコンストラクターでは、( を返すことでint*)メモリを割り当ててDataメンバーに割り当てようとしますが、非ポインターにポインターを割り当てることはできません。

あなたがコメントに書いているように、それはそうあるべきです

DATA_TYPE* Data;
于 2012-10-25T10:05:24.947 に答える