如何将值初始化为向量中声明的对象?
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>
没有成员 x
和 y
,因此你会得到编译器错误。
你可能想做
vector<coordinates> cood(1);
这是一个 坐标向量,有一个 coordinates
元素,将由编译器生成的默认构造函数默认初始化。
但是,您可以直接 brace-list-initialization 来处理一些琐碎的类型,例如:
std::vector<coordinates> cood{ {4, 5} };
这和你想做的一样。
嗯,我的问题是如何为向量中创建的 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>
没有成员 x
和 y
,因此你会得到编译器错误。
你可能想做
vector<coordinates> cood(1);
这是一个 坐标向量,有一个 coordinates
元素,将由编译器生成的默认构造函数默认初始化。
但是,您可以直接 brace-list-initialization 来处理一些琐碎的类型,例如:
std::vector<coordinates> cood{ {4, 5} };
这和你想做的一样。