【问题标题】:Dynamic Allocation of Memory - this declaration has no storage class or type specifier内存的动态分配 - 此声明没有存储类或类型说明符
【发布时间】:2021-09-17 09:54:12
【问题描述】:

我正在尝试在结构内的任何函数之外(全局)动态分配一些内存。但是我得到了这个错误

struct filaNoua{ 
  string numeClient, numeOperatorDate
  int * tipFier, * diametruFier, * lungimeFier;
  tipFier = (int *) malloc(50 * sizeof(int));
}
  

错误:此声明没有存储类或类型说明符

【问题讨论】:

  • 您缺少分号。你有一个struct的赋值语句inside
  • 你不能只是在一个结构中放任意代码。 tipFier = (int *) malloc(50 * sizeof(int)); 需要在函数中。在这种情况下,应该使用结构的构造函数。虽然你为什么在 c++ 程序中使用 malloc?
  • 您在string 声明行的末尾以及struct 右大括号的末尾缺少分号。
  • 您应该创建一个构造函数并在构造函数中使用operator new。在析构函数中,使用delete。您可能希望创建一个复制构造函数来强制代码复制指针或复制tipFier 指向的目标。另一种选择是使用std::vector 而不是分配内存。

标签: c++ memory dynamic


【解决方案1】:

线

  tipFier = (int *) malloc(50 * sizeof(int));

该语言不支持。这样的一行需要在struct的成员函数下。

struct添加一个构造函数,并在构造函数的定义中分配内存。

您在struct 下的第一行中还缺少;

语法修复以消除编译器错误:

struct filaNoua{ 
  string numeClient, numeOperatorDate; // The missing ;
  int * tipFier, * diametruFier, * lungimeFier;
  filaNoua()
  {
    tipFier = (int *) malloc(50 * sizeof(int));
  }
};

但是,您还必须做其他事情:

  1. 确保其他成员变量已正确初始化。
  2. 按照Rule of Three/Rule of Five 确保该类分配的资源被释放。

以下是您应该做的其他事情:

  1. 最好使用标准容器,例如std::arraystd::vector,而不是在自己的类中管理内存。
  2. 最好将成员变量的声明分开,以提高可读性。
struct filaNoua{ 
  string numeClient;
  string numeOperatorDate;
  int * tipFier; // Better to use std::vector<int> or std:::array.
  int * diametruFier;
  int * lungimeFier;

  ...
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多