【问题标题】:How to pass a dynamic array of structs to a member function?如何将结构的动态数组传递给成员函数?
【发布时间】:2015-08-05 12:55:03
【问题描述】:

我想知道如何将动态分配的结构数组从主函数传递给类的成员函数。我不一定需要在成员函数中更改其值,只需打印即可。

如果我像在以下代码 sn-p 中使用整数数组那样执行此操作,我会发现 MyStruct 未在 MyClass.hMyClass.cpp 文件中定义。 (这是有道理的)
如果我在MyClass.h 中包含main.cpp,我会收到很多奇怪的错误。另一个想法是在成员函数参数中添加struct,但这也会导致其他错误。

我需要在类之外声明struct数组,而不是作为成员,我不能使用STL容器。

ma​​in.cpp

#include "MyClass.h"

int main()
{
    MyClass my_class;

    struct MyStruct
    {
        int a;
        int b;
    };

    MyStruct* struct_array = new MyStruct[4];
    // Fill struct array with values...
    my_class.printStructArray(struct_array);
}

MyClass.h

#include <iostream>
class MyClass
{
    // ...
    void printStructArray(MyStruct* struct_array);
};

MyClass.cpp

#include "MyClass.h"

void MyClass::printStructArray(MyStruct* struct_array)
{
    std::cout << struct_array[0].a << struct_array[0].b;
    // ...
}

【问题讨论】:

  • 为什么不能使用标准容器?
  • 因为这可能会循环进行数百万次,并且有人坚持认为 STL 容器对于我们的性能要求来说太慢了。我无法对此发表评论,因为我只是一名实习生。如果这种方式太复杂,我将使用 STL 容器。
  • 无论是谁告诉你的,我都会打电话给 BS。使用优化编译时,向量应该与数组一样快。它旨在替代 DIY 动态数组。
  • 我也是这么想的,我肯定会用它们,否则当我不只是卑微的实习生时;)
  • 如果您不使用 STL 容器,我认为您应该将数组的大小传递给您的函数。

标签: c++ arrays struct member-functions


【解决方案1】:

只需将struct 定义移动到MyClass.h 或它自己的单独头文件中:

MyClass.h

#include <iostream>

struct MyStruct {
  int a, b;
};
class MyClass {
  // ...
  void printStructArray(MyStruct* struct_array);
};

【讨论】:

  • 成功了,我完全忘记了您可以在类头文件或单独的头文件中定义内容,而无需使其成为该类的成员。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
相关资源
最近更新 更多