如何通过拥有数组的内存位置来访问数组的元素?

时间:2017-10-01 06:26:13

标签: c++ arrays pointers

所以,这只是myArray.cpp类中的一些方法。它给了我错误

setSize(orig.getsize());
                for(int i = 0; i<getSize();i++)
                    setData(i,orig.getData(i));

以上代码(错误 - 非类型为double)。谁能帮帮我吗?我正在尝试将数组复制到对象数组

        myArray::myArray(double* orig, int size) {


            setSize(orig.getsize());
            for(int i = 0; i<getSize();i++)
                setData(i,orig.getData(i));

}

        void myArray::setSize(int value) {
            if (value > 0) {
                size = value;
            }
        }

    void myArray::setData(int index, double value) {
        if ((index >= 0) && (index < size)) {
            arr[index] = value;
        } else {
    //        cout << "NO!" << endl;
        }
    }

    double myArray::getData(int index) const {
        if ((index >= 0) && (index < size)) {
            return arr[index];
        } else {
            return arr[size - 1];
        }
    }

那是我的main.cpp类

#include <iostream>
#include "myArray.h"
//#include "myArray.cpp"

using namespace std;



int main (int argc, char **argv)
{
    cout << "**************Testing Default Constructor*****************" << endl;
    myArray A1;
    cout << "A1: ";
    A1.print();

    cout << "**************Testing Alt Constructor 1*****************" << endl;
    myArray A2(5,0);
    cout << "A2: ";
    A2.print();

    cout << "**************Testing init*****************" << endl;
    A2.init();
    cout << "A2 after init: ";
    A2.print();

    int size = 5;
    double *temp = new double[size];
    for(int i = 0; i < size; i++)
    {
        temp[i] = i;
    }

    cout << "**************Testing Alt Constructor 2*****************" << endl;
    myArray A3(temp, size);
    cout << "A3: ";
    cout << A3.getSize();
    cout << endl;
    cout << "Fe";
    A3.print();

这是我的myArray.cpp类

#ifndef MYARRAY_H_INCLUDED
#define MYARRAY_H_INCLUDED

/***************************************************************************
 * myArray class header file
 ***************************************************************************/

class myArray
{
    public:
        myArray();
        myArray(int,double);
        myArray(double*, int);
        ~myArray();

        int getSize() const;
        bool equal(const myArray &rhs) const;
        void setData(int index, double value);
        void insert(int, double);
        void remove(int);
        double get(int);
        void clear();
        int find(double);
        bool equals(myArray&);
        void print() const;
        void init();
        double getData(int index) const;
//      void init();
    //  void print() const;
    void expand();


    private:
        int size;
        double *arr;
        void setSize(int value);

};


#endif // MYARRAY_H_INCLUDED

这是我的myArray.cpp类,我在默认的参数化构造函数中得到错误

#include "myArray.h"

#include <iostream>
using namespace std;

myArray::myArray() : size(0) {
    //    size = 10;
    arr = new double [size];
}

/*myArray::myArray(int _size) : size(_size) {
    //    size = _size;
    arr = new double [size];
    for (int i = 0; i < size; i++) {
        arr[i] = i;
    }
} */

myArray::myArray(int _size, double value) : size(_size) {
    //    size = _size;
    arr = new double [size];
    for (int i = 0; i < size; i++) {
        arr[i] = value;
    }
}

/*myArray::myArray(myArray* temp, int size)
{
   setSize(temp.getSize());
    for (int i = 0; i < getSize(); i++) {
        setData(i, temp.getData(i));
    }
} */
myArray::myArray(double* orig, int size) {


    setSize(orig.getsize());
    for(int i = 0; i<getSize();i++)
        setData(i,orig.getData(i));
    //double arr[size];
 //   arr = new double[size];
//    p = orig;

  //  for(int i = 0;i<size;i++)
   // {
   //     arr[i] = orig[i];
  //      cout << arr[i] << " ";
  //  }

   // cout << endl;
   // setSize(size);
   // for (int i = 0; i < getSize(); i++)
    //    setData(i, orig.getData(i));

 //   cout << "hell";
   // for (int i = 0; i < size; i++) {
     //   arr[i] = myArray[i];
       // cout << arr[i];
    //}
  //  arr = myArray;
}

myArray::~myArray() {
    delete [] arr;
}

int myArray::getSize() const {
    return size;
}

void myArray::setSize(int value) {
    if (value > 0) {
        size = value;
    }
}

void myArray::setData(int index, double value) {
    if ((index >= 0) && (index < size)) {
        arr[index] = value;
    } else {
//        cout << "NO!" << endl;
    }
}

double myArray::getData(int index) const {
    if ((index >= 0) && (index < size)) {
        return arr[index];
    } else {
        return arr[size - 1];
    }
}

void myArray::print() const {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

void myArray::expand() {
    double *localArray = new double[size + 1];

    for (int i = 0; i < size; i++) {
        localArray[i] = arr[i];
    }
    localArray[size] = size;

    delete [] arr;
    setSize(size + 1);
    arr = localArray;
    //    myArray = new int[size];
    //
    //    //Is this a deep-copy or a shallow-copy?
    //    //Can you replace one with the other?
    //    //What are the advantages and disadvantages?
    //    for(int i=0; i < size; i++) {
    //        myArray[i] = localArray[i];
    //    }
    //    delete [] localArray;
}

bool myArray::equal(const myArray& rhs) const {
    bool result(true);

    if (getSize() != rhs.getSize()) {
        result = false;
    } else {
        for (int i = 0; i < getSize(); i++) {
            if (getData(i) != rhs.getData(i)) {
                result = false;
            }
        }
    }
    return result;
}

void myArray::init()
{
    cout << "Enter the " << size << " elements to populate the array " << endl;
    for(int i = 0;i<getSize();i++)
    {
        int value;
        cin >> value;
        setData(i,value);
    }

}

1 个答案:

答案 0 :(得分:0)

对不起我不知何故我认为您需要有关运行时错误的帮助,但您需要有关编译错误的帮助。

代码的这一部分中的编译错误

myArray::myArray(double* orig, int size) {
    setSize(orig.getsize());
    for(int i = 0; i<getSize();i++)
        setData(i,orig.getData(i));

具体是关于orig.getSize()部分。 orig的类型为double *(指向double的指针),指针不具有成员函数,只有类才能执行,这就是编译器说的原因:&#34;这是非类型的double&#34;

实际上c ++中没有办法从指向它指向多少元素的指针中知道但幸运的是你的函数已经有了一个参数大小,我猜这个参数大小是为了传递orig数组的大小。这条线应该是setSize(size);

现在两行较低,你在setData(i,orig.getData(i));上得到一个类似的错误,orig仍然是一个双*,所以它仍然没有成员函数。正确的方法是setData(i, orig[i]);

编辑: 顺便说一句,我快速查看其余代码,告诉我你的setSize方法没有分配一个合适大小的数组,所以你应该修复它。

相关问题