传递用于结构定义的参数

Pass argument for use in struct definition

本文关键字:参数 定义 结构 用于      更新时间:2023-10-16

我想声明一个结构体:

struct myStruct{
    myType myVar[mySize];
    //...
};

我怎么做,或者我把它放在哪里,这样我就可以在运行时知道mySize的值时这样做?

mySize实际上有一个默认值,但是用户可以通过标准输入提供一个不同的值。然后将这个自定义大小传递给函数,在函数中定义结构体。

但是如果结构在函数定义内,我得到一个错误,说它不允许是变量,如果我把它放在函数外面(在头文件中),它抱怨mySize没有定义-当然,它不是通过任何方式传递的。

我的猜测是解决方案在于OOP*,但这不是我还没有研究过的东西。

*如果这是一个错误的假设,请告诉我,以便我可以删除标签

可以使用vector

#include <vector>
struct myStruct
{
public:
  // this is your array
  std::vector<myType> myVar;
  // this is the default constructor
  // this tells that the user will be passing a number
  myStruct(int const &mySize)
  {
    myVar.resize(mySize);
  }
};

在主目录

int main()
{
  myStruct example(10);
  return 0;
}

这样,您就不必担心内存管理。

myStruct是一个对象。

有两种类型的内存,堆栈和堆,如果你想进入指针和内存管理,你应该了解它们。我将告诉你如何使用指针实现这一点,但我不建议你这么快就开始
struct myStruct
{
public:
  // this is your array
  myType *myVar;
  // this is the default constructor
  // this tells that the user will be passing a number
  myStruct(int const &mySize)
  {
    myVar = new myVar[mySize];
  }
  // this is your default destructor
  ~myStruct()
  {
    delete[] myVar;
  }
};

但是myVar变成了一个指针,它的处理方式与vector不同。

Vector是c++标准库的一部分。如果这不是作业,我建议你们用它。

C数组在c++中不能作为类成员具有动态大小。然而,c++有一个类提供了这个功能——std::vector

这给了我们:

struct myStruct {
    std::vector<myType> myVar;
    myStruct(std::size_t size = default_size)
        : myVar(size) {}
};

带回家的信息:熟悉c++标准库,没有扎实的知识在c++中工作几乎是不可能的。