1

メンバー関数に問題があります。

私の目標は、セットのコピーを作成し、それへのポインターを返すことです。

            template <class T>
            class Set
            {
            public:
                Set(int length = 0);     //Default constructor
                ~Set();              //Defualt Destructor
                int size();          //Return how many elements are in set
                bool contains(T test);   //Searches set for T
                bool add(T adding);      //Adds T to set, repeats are denied
                bool remove(T removing); //Attempts to remove T
                T** elements();      //Returns a pointer to the set
                T** copy();          //Creates a copy of the set, and returns a pointer to it
                T &operator[](int sub);  //Overload subscript

            private:
                T** set;        //Pointer to first of set
                int setSize;        //Int holding amount of Elements available
                int holding;        //Elements used
                void subError();    //Handles Subscript out of range
                void adder();       //returns a copy with +1 size
            };

ここに私のコンストラクタとコピー関数があります:

            template <class T>
            Set<T>::Set(int length) //Default constructor
            {
                for(int i = 0; i < length; i++)
                {
                    set[i] = new T;
                }
                setSize = length;
                holding = 0;
            }

            template <class T>
            T** Set<T>::copy()  //Creates a copy of the set, and returns a pointer to it
            {
                T** setCopy;
                for(int i = 0; i < setSize; i++)
                {
                    setCopy[i] = new T;
                    *setCopy[i] = *set[i];
                }
                return setCopy;
            }

エラー エラー C4700: uninitialized local variable 'setCopy' used および C4700: uninitialized local variable 'temp' used というエラーが発生します。

4

2 に答える 2

1

ここにはいくつかの問題があります。

setCopyまず、変数を使用する前に初期化する必要があります。

 T** setCopy = new (T*)[setSize]

あなたが望むものかもしれません。これは、 がへのポインターsetCopyの配列を指していることを示しています。その後でのみ、 のメンバーがの配列を指していることを伝えることができます。(デフォルトのコンストラクターでも同じことを行う必要があります)。setSizeTsetCopyT

ただし、セットのコピーを作成することが必要な場合は、copyメソッドを記述する代わりに、コピー コンストラクター代入演算子を記述して、次のように記述できるようにする必要があります。

Set<int> set2 = set1;

正しいことをさせてください。

于 2013-10-31T03:54:06.793 に答える
0

setCopy は実際には初期化されていません...T** setCopy; どこを指しているのか考えてみてください。

于 2013-10-31T03:28:39.560 に答える