2014-11-02 1 views
0

Я новичок в C++, поэтому я не уверен, что это возможно. Я хочу знать, могу ли я получить доступ к динамическому 2D-массиву из объекта, который передается функции. Вот упрощенный код:Как получить доступ к динамическому 2D-массиву из объекта, который передается функции в C++?

Класс A:

class A { 
public: 

    A(int length, int width) { 
     // initializes the 2d array 
    } 

    int** getArray() { return array2d;} 

    int getLength() { return length;} 

    int getWidth() { return width;} 

private: 

    int** array2d; 
    int length, width; 
}; 

Класс B:

#include "A.h" 
class B { 
public: 

    B() {} 

    void print(A* a) { 

     int** temp = a->getArray(); // ERROR HERE 

     for (int i = 0; i < a->getLength(); i++) { 
      for (int j = 0; j < a->getWidth(); j++) 
       cout << temp[i][j] << endl; 
     } 
    } 

private: 

    int** array2d; 
}; 

main.cpp:

int main() { 
    A a = new A(15,15); 
    B b = new B(); 

    b->print(a); 
} 

Я получаю эту ошибку: Error 13 error C2086: 'int **A::array2d' : redefinition.

Я не уверен, правильно ли передаю 2D-массив. Я открыт для всех предложений. Может ли кто-нибудь сказать мне, как решить эту проблему? Благодарю.

Дайте мне знать, если требуется дополнительное объяснение.

+0

Каков полный источник для ваших файлов? –

+0

@ Smith_61 Что вы подразумеваете под полным исходным кодом? Если вы имеете в виду весь исходный код, то он слишком сложный и длительный, поэтому я упростил проблему в качестве примера в коде выше – Alias

+0

Как и во всем коде, необходимом для репликации ошибки. Мы не можем отлаживать то, что мы не можем видеть. –

ответ

1

Хорошо, я думаю, что нашел проблему, номер ошибки подсказывает, что вы что-то переопределяете, и я думаю, что это имя array2d, потому что в обоих классах вы используете одно и то же имя. Надеюсь, изменение имени поможет вам.
И я также рекомендую вам изменить имя параметра a в функции void print(A* a) на void print(A* objA), может быть проблема здесь.

Смежные вопросы