一个星号后跟一个定义数组的类名? c++ [关闭]

Posted

技术标签:

【中文标题】一个星号后跟一个定义数组的类名? c++ [关闭]【英文标题】:is a star followed by a class name defining an array? c++ [closed] 【发布时间】:2020-11-26 02:51:41 【问题描述】:

我几年前编程,我在主函数中编写了所有内容,而不是使用类和其他函数,所以我很困惑。我有一个具有指定格式的项目,定义数组的方式让我感到困惑。我最初认为 xArray 是一个动态数组,但是当我尝试为其分配大小时,它会给出错误 E0513“类型为“int *”的值不能分配给类型为 Group1 的实体

Group1
int x,y;


Group2
int a,b;
Group1* xArray; 


void main 
Group1 g1;

int length;
cout <<"enter the length"<< endl;
cin >> length;
g1.xArray = new int[length];

所以基本上,我有几个问题,1. xArray(pointer?array?) 到底是什么 2. 如果它是一个动态数组,我可以在类在哪里定义?

【问题讨论】:

错误是正确的。 group1* xArray; xArray 需要指向 group1 对象而不是 int(s)。 g1.xArray = new int[length]; 应该是 g1.xArray = new Group1[length]; 大小写也很重要。 group1Group1 不同,我认为这是一个错字。 * 在此上下文中指定 C++ 中的指针。有关更多信息,请参阅您的 C++ 教科书。 你用哪本书来学习C++?你的代码中有许多基本的语法错误,应该在你的书中解释。 我要说多少遍? “你不能通过反复试验来学习 C++!” 这不是为了上课,而是为了工作。他给了我一个我在 python 中完成的任务。他说他想用 C 家族语言编写它,所以我使用了 c++ 向量。然后他给了我这个模板,让我在他定义类的地方使用,并说要使用动态数组。在我提供的示例中,我对代码的唯一贡献是 main 函数。 【参考方案1】:

您的问题是您试图将一种类型的数组分配给另一种类型的指针。这是一个更简单的例子:

struct OneInt 
   int a;

...
OneInt *o = new int[5]; // This cannot work, int is not the same type as OneInt
OneInt *o = new OneInt[5]; // This will allocate memory for an array of type OneInt

但老实说,你不应该这样做。您正在寻找一个动态大小的向量,因此 c++ 可以通过提供 std::vector 来帮助您:

Group2
  int a,b;
  std::vector<Group1> xArray; // By using an array, the memory is initialized and 
                              // handled automatically


Group2 g;
g.xArray.resize(5);

这样,我们就不需要搞乱newdelete,而且我们有更好的、异常安全的封装代码。这是现代 c++ 的一种技术,称为资源获取即初始化 (RAII)。

【讨论】:

以上是关于一个星号后跟一个定义数组的类名? c++ [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

小白学习C++ 教程十一C++类中访问修饰符

从类名转换的 C++ 指针类型 [关闭]

这是我尝试让用户将值输入到数组中。然后将其转换为打印的星号数量

js之function

c++定义一个名为Person的类?

markdown最基本语法