C++;从函数返回二维对象数组以在另一个函数中使用 我一直在为学校的C++项目工作,在遇到2D数组时遇到了一些问题。因此,我有以下课程: class mecanice { public: mecanice(); ~mecanice(); ... protected: private: ... MyClass Ob[8][8]; };
我需要一个返回Ob的方法,这样我就可以在另一个类的方法中使用它,该类将根据Ob中的内容进行操作:C++;从函数返回二维对象数组以在另一个函数中使用 我一直在为学校的C++项目工作,在遇到2D数组时遇到了一些问题。因此,我有以下课程: class mecanice { public: mecanice(); ~mecanice(); ... protected: private: ... MyClass Ob[8][8]; };,c++,arrays,function,class,reference,C++,Arrays,Function,Class,Reference,我需要一个返回Ob的方法,这样我就可以在另一个类的方法中使用它,该类将根据Ob中的内容进行操作: class doodle { public: doodle(); ~doodle(); void do_stuff(MyClass M[8][8]); ... protected: private: ... }; 我尝试过各种方法,但都以编译错误告终,这些错误通常与指针有关。有什么方法可以做到这一点吗?您不能从函数返回数组。在您的情况下,函数如下所示: M
class doodle
{
public:
doodle();
~doodle();
void do_stuff(MyClass M[8][8]);
...
protected:
private:
...
};
我尝试过各种方法,但都以编译错误告终,这些错误通常与指针有关。有什么方法可以做到这一点吗?您不能从函数返回数组。在您的情况下,函数如下所示:
MyClass[][] bar ();
他身体不好
您可以考虑将该函数以MyCu[[]]作为参数,而不是将其作为返回值返回,并适当地填充它。
void bar (MyClass foo[8][8]);
您也可以返回指针(这是合法的):
但您必须确保要返回指针的对象的内存是持久的(即,不要返回指向局部变量的指针等)。请尝试以下操作
const MyClass ( * myMagicMethod() )[8] const;
或
如果不希望在其他类的方法中更改数组,则使用限定符const
另一种方法是通过引用传递数组。比如说
const MyClass ( & myMagicMethod() )[8][8] const;
或
在处理数组的方法中,参数也必须像reference一样声明。是否尝试使用
typedef MyClass MyClassArray[8][8]
并返回Ob
作为MyClassArray
?使用std::vector
我个人会使用typedef MyClass(a)[8][8]
(或typedef decltype(Ob)A;
),并使用函数returnconst A&
,以澄清函数正在返回引用(因此,如果需要,typedef还可以用于声明局部变量)。不过,这只是个人喜好。非常感谢,我现在通过引用传递数组就成功了。我不知道sytanx(&MyMethod())[8][8]
,这就是为什么我会遇到各种各样的错误。旁白:为什么结尾还有另一个const
?如果我把它放在那里,我会得到一个编译器错误(顺便说一句,使用附带MinGW的代码块)。@GeorgeTodosi,正如我在回答中所写,您可以使用typedef简化语法。:)
typedef const MyClass ( *A )[8];
//...
A myMagicMethod() const;
const MyClass ( & myMagicMethod() )[8][8] const;
typedef MyClass ( &A )[8][8];
//...
const A myMagicMethod() const;