【问题标题】:How to manipulate an array of structure containing 2D array如何操作包含二维数组的结构数组
【发布时间】:2020-04-17 11:39:07
【问题描述】:

使用C++,我正在实现一个HiddenLayer结构的数组,定义为

    struct HiddenLayer
    {
        int prev;     ///Number of Rows in node
        int next;     ///Number of Columns in node

        float **node; ///2D array pointer
    };

结构数组在主程序中初始化,node是结构内部二维数组的指针。我将这个数组初始化为

    int main()
    {
        struct HiddenLayer HLayer[1]; 

        HLayer[0].prev = 1;  //Num of rows
        HLayer[0].next = 3;  //num of col

        HLayer[0].node = (float *) malloc((HLayer[0].prev) * sizeof(float *));  
 
        for(int i=0;i<HLayer[0].prev;i++)
            HLayer[0].node[i] = malloc(HLayer[0].next * sizeof(float));

    
        return 0;
    }

但我收到此错误:

In function ‘int main()’:
main.cpp:22:73: error: cannot convert ‘float*’ to ‘float**’ in assignment
     HLayer[0].node = (float *) malloc((HLayer[0].prev) * sizeof(float *));  
                                                                         ^

>main.cpp:25:35: error: invalid conversion from ‘void*’ to ‘float*’ [-fpermissive]
         HLayer[0].node[i] = malloc(HLayer[0].next * sizeof(float));

我遵循了HereHere 给出的答案

我做错了什么?

【问题讨论】:

  • 所以这不是c,对吧?
  • (float *) malloc 至少应该是(float **) malloc
  • 1.您正试图将float * 影响到float **。 2. 你没有转换到正确的类型。
  • ... 和您的其他 malloc 应该转换为 (float *) - 简单!
  • 对不起。被使用 malloc 抛弃。 stackoverflow.com/a/184540/1216776

标签: c++ arrays c++11


【解决方案1】:

错误消息是不言自明的:您混淆了类型。

HLayer[0].node = (float *) malloc((HLayer[0].prev) * sizeof(float *));

应该是

HLayer[0].node = (float **) malloc((HLayer[0].prev) * sizeof(float *));

HLayer[0].node[i] = malloc(HLayer[0].next * sizeof(float));

应该是

HLayer[0].node[i] = (float *) malloc(HLayer[0].next * sizeof(float));

话虽如此,你为什么要在 C++ 中使用 malloc() 和家人?

【讨论】:

  • Do I cast the result of malloc? C++ 不是这样吗?为什么不用new 而不是malloc
  • @TruthSeeker (1) No. (2) 这和我回答的最后一行一样。
  • @SouravGhosh,谢谢你的回答!我一定会避免使用新容器和 STL 容器等 C++ 特性。
  • 但是我应该如何向这个数组添加和操作数据呢? @SouravGhosh
  • @PeDro 如果没有new 或标准库,您将无法在 C++ 中可靠地使用动态内存分配。 malloc 没有 new 在技术上总是会导致未定义的行为,并且如果使用的类型是非平凡的。限制使用new,但允许malloc,在C++ 中没有意义。
猜你喜欢
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2017-08-27
相关资源
最近更新 更多