【问题标题】:Passing a multidimensional array between classes在类之间传递多维数组
【发布时间】:2014-03-20 04:12:36
【问题描述】:

我知道您可以使用以下方法将多维数组传递给函数:

void Class1::foo(Bar bars[][10])
{
   // Do stuff
}

并且您可以使用以下方法返回指向一维数组中第一个成员的指针:

Bar* Clas2::getBars()
{
   return bars;  //Where bars is a member of a class
}

但是当 'bars' 是一个多维数组时,我得到了错误:

Cannot convert Bar (*)[10] to Bar* in return

有人能解释一下为什么会这样吗?

【问题讨论】:

    标签: c++ multidimensional-array compiler-errors parameter-passing


    【解决方案1】:

    你应该使用:

    Bar (*Clas2::getBars())[10]
    {
        return bars;  //Where bars is a member of a class
    }
    

    或者更好看的方式:

    typedef Bar (*Bar10x10ptr)[10];
    
    Bar10x10ptr Clas2::getBars()
    {
        return bars;  //Where bars is a member of a class
    }
    

    【讨论】:

    • 如果我这样做,我会收到一个错误,指出“getBars”被声明为返回数组的函数,这似乎是我想要做的。
    • 在 GCC 上运行良好。尝试使用int 而不是Bar 对其进行测试。或者你可以试试这个:Bar (*a)[10]; decltype(a) Clas2::getBars() { return bars; //Where bars is a member of a class }
    【解决方案2】:

    你应该像编译器说的那样写

    Bar (*)[10] Clas2::getBars()
    {
       return bars;  //Where bars is a member of a class
    }
    

    您说得对,“您可以返回指向 .. 数组中第一个成员的指针”。二维数组的成员或更精确的元素是Bar [10] 类型的一维数组。 指向该元素的指针将显示为 Bar (*)[10]

    哦,对不起,确实应该是这样的

    Bar (* Clas2::getBars() )[10]
    {
       return bars;  //Where bars is a member of a class
    }
    

    或者你可以使用 typedef。例如

    typedef Bar ( *BarPtr )[10];
    BarPtr Clas2::getBars()
    {
       return bars;  //Where bars is a member of a class
    }
    

    【讨论】:

    • 当我这样做时,我得到了错误:“unqualified-id before ')' token,并指出 getBars() 没有返回任何类型。
    • @Xemerau 我更新了我的帖子。如果您使用更新帖子中的构造,那么错误是什么?您使用了什么构造?
    • 错误来自您在更新前发布的解决方案,但使用 typedef 修复了它。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2020-04-05
    • 2022-01-20
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2012-10-12
    相关资源
    最近更新 更多