2014-11-02 58 views
0

我是C++的初学者,所以我不确定这是否可行。我想知道是否可以从传递给函数的对象访问动态2D数组。下面是简化的代码:如何从传递给C++函数的对象访问动态二维数组?

类A:B

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; 
}; 

类:

#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

什么是您的文件的完整来源? – 2014-11-02 00:45:59

+0

@ Smith_61你是什么意思全部来源?如果你的意思是所有的源代码,那么它太复杂和冗长了,所以我简化了这个问题,作为 – Alias 2014-11-02 01:06:47

+0

以上代码中的一个例子,就像复制错误所需的整个代码一样。我们无法调试我们看不到的东西。 – 2014-11-02 01:20:07

回答

1

好吧,我想我发现了这个问题,错误号码表明你正在重新定义一些东西,我认为它的名字是array2d,因为在这两个类中你都使用相同的名字。希望改变名字将有助于你。
而且我还建议您将函数void print(A* a)中的参数a的名称更改为void print(A* objA),可能问题在这里。