如何将值初始化为向量中声明的对象?

How to initialize a value to a object decleared in a vector?

嗯,我的问题是如何为向量中创建的 class coordinates 的对象 cood 设置值。

#include <iostream>
#include <vector>

using namespace std;

class coordinates
{
public:
    short int x;
    short int y;
};

int main()
{
    vector<coordinates> cood[1];
    cood[1].x=(short int)4;
    cood[1].y=(short int)5;

    return 0;
}

我遇到了这个错误

class std::vector<coordinates>' has no member named 'y'.    
(for both x and y).

我尝试了不同的方法,但总是出现一些错误。

这个

vector<coordinates> cood[1];

表示vector<coordinates>的数组包含一个vector<coordinates>cood[1]也是错误的,因为数组索引是从0, 1,..., n-1开始的,而不是1, 2,..., n。访问越界将导致undefined behaviour,因此发布的代码有一个UB。

您应该使用 cood[0],这意味着 cood 数组的第一个元素(即 vector<coordinates> 类型)。显然 vector<coordinates> 没有成员 xy,因此你会得到编译器错误。


你可能想做

vector<coordinates> cood(1);

这是一个 坐标向量,有一个 coordinates 元素,将由编译器生成的默认构造函数默认初始化。

但是,您可以直接 brace-list-initialization 来处理一些琐碎的类型,例如:

std::vector<coordinates> cood{ {4, 5} };

这和你想做的一样。