c++中的结构数组

Array of structures in C++

本文关键字:数组 结构 c++      更新时间:2023-10-16

我正在尝试定义

Vertex[] total_vertices = new Vertex[no_vertice];
在c++

。但是当编译时,我得到这个:

:568:8:错误:'['令牌前预期的非限定id

我需要声明一个大小为"no_vertice"的顶点数组,然后使用它的"Length"方法来获取它的大小。为什么不工作?

在c++中,[]只在变量名之后,而不是在类型之后(与Java或c#不同)。

但这无论如何都不起作用,因为您不能将指向数组的第一个元素的指针(由new返回)分配给数组。你需要使用一个指针:

Vertex* total_vertices = new Vertex[no_vertice];

并确保delete[]后,你完成使用它。

你说你需要使用它的Length方法,这有两个问题:

  1. 数组不像java中那样有方法;它们只是c++中的内存块。如果您想使用具有成员函数的类数组结构,请查看std::vector
  2. 你不需要一个数组的Length方法,即使他们有一个(他们没有),因为你已经有了no_vertice变量的大小。

c++数组没有length方法。您需要查看std::vector

正确的做法是。

Vertex *total_vertices = new Vertex[no_vertice];

然而,在c++中,内置数组没有Length方法。它们根本没有方法,因为它们不是类。它的"长度"应该是no_vertice

你似乎说 Java c#…

你想

std::vector<Vertex> total_vertices(no_vertice);

,然后使用它的size()方法来获取大小。

最好避免直接使用new,除非没有其他选择,否则很容易丢失对象的所有权并最终导致内存泄漏。

你应该这样做boost::shared_array total_vertices(新顶点[no_vertices]);或boost::scoped_array total_vertices(新顶点[no_vertices]);这样你就不必担心清理自己和泄漏内存。http://www.boost.org

在c++中,如果vector可以做你想做的事情,总是使用vector而不是数组。因为矢量提供了一种简单的方法和一些有用的方法(比如你想要的size())。最重要的是,当你订阅vector中的一个元素时,vector比数组更安全(vector有一个end()方法来确保你不能访问它的范围之外)。所以我认为你应该这样写:

#include <vector>
std::vector<Vertex> total_vertices(no_vertice); //vector is a container so you should declare it with a specified type.

您可以在vector的c++参考中获得有关vector的更多信息。