1

C++で作成したクラスの使用に問題があります。私は最近C++の学習に着手し、すぐに適切な方法を探しましたが、それを「適切な」方法にした後もエラーが発生しました。それで、これが単なる愚かな誤解である場合は、事前に謝罪します(私はそれを疑っていますが...)関連するコードは以下のとおりです

ArrayList.h

#ifndef ARRAYLIST_H_
#define ARRAYLIST_H_

#include <string>

template<class T>
class ArrayList {

    private:
         //Data fields-------------------//
        T *array;
        int size;
        int capacity;
        bool sorted;

        //Methods-----------------------//
        void reallocate();
        void reallocate(int newSize);

        T* mergeSort(T* array, int arraySize);

    public:
        //Constructors------------------//
        ArrayList();
        ArrayList(int theSize);

        //Methods-----------------------//
        //Operations
        bool add(T element);
        bool add(T element, int index);
        bool add(ArrayList<T> list);
        bool add(ArrayList<T> list, int index);
        std:string toString();
};

#endif /* ARRAYLIST_H_ */

ArrayList.cpp

#include "ArrayList.h"

//~Constructors-----------------------------------------------
/**
 * Default constructor,
 * creates a 20 element ArrayList, of type T.
 */
template<class T>
ArrayList<T>::ArrayList() {

    array = new T[20];
    capacity = 20;
    size = 0;
}

//~Methods---------------------------------------------------
/**
 * Adds the passed in element to the end of the ArrayList.
 *
 * Runs in O(n) in worst case, where reallocate is called.
 *
 * @param element the element to add to the array.
 */
template<class T>
bool ArrayList<T>::add(T element) {

    bool value = false;

    if (element != NULL) {
        if ((size - 1) == capacity) {

            value = reallocate();
        }

        if (value) {
            array[size] = element;
            size++;
        }
    }

    return value;
}

ArrayListTest.cpp

#include "ArrayList.h"
#include <iostream>

int main(void) {

    using namespace std;

    ArrayList<int> myList();

    myList.add(184387);
    myList.add(14);
    myList.add(147);
    myList.add(1);
    myList.add(-37);
    myList.add(584);
    myList.add(-2147);
    myList.add(0);
    myList.add(-75);
    myList.add(147);
    myList.add(-37);
    myList.add(0);
    myList.add(25);
    myList.add(187);
    myList.add(92);
    myList.add(-17);

    cout << myList.toString();
}

TestArrayList.cppファイルでエラーが発生します。すべてのadd呼び出しとcout呼び出しでエラーが発生しました。

追加呼び出しのエラーは次のとおりです。

request for member 'add' in 'myList', which is of non-class type 'ArrayList<int>()'

cout呼び出しのエラーは次のとおりです。

Method 'toString' could not be resolved

誰かが私がここで間違っていることを知っていますか?

4

1 に答える 1

7
ArrayList<int> myList();

する必要があります

ArrayList<int> myList;

あなたは最も厄介な解析(グーグルそれ)に遭遇しています。基本的にArrayList<int> myList();、変数を宣言しませんがmyList、引数を取らずにを返すと呼ばれる関数を宣言しますArrayList<int>

いくつかのサイドノート:

  • コンストラクターでメモリーを割り当てていますが、それを解放することはありません。デストラクタが必要です。
  • それはあなたが三つのルールに従うべきであることを意味します(グーグルそれ)
  • 私の精神的能力(はい、私はそれらを持っています、それを低く保ちます)は、あなたの次の問題はそれがリンクしていないということになるだろうと私に教えてくれます。実装をヘッダーに移動します。テンプレートには、それらを専門とするすべての翻訳ユニットに実装が表示される必要があります。
于 2012-08-03T03:29:11.260 に答える