为什么这种向量声明无效?
Why is this declaration of a vector invalid?
我得到的错误是"预期为;"。
const int SIZE = 9;
vector<string>possiblePalindromes(SIZE) = // error is shown here
{ "A man a plan a canal Panama",
"The rain in Spain",
"No lemon, no melon",
"radar",
"CS1D",
"Was it a cat I saw?",
"Racecar",
"Saddleback",
"dad" };
我的问题是,这不是一个有效的声明吗?如果我删除 (SIZE(,错误就会消失,但我的目的是声明具有特定大小和一组预定义值的向量。这样,当我决定遍历向量时,例如
for (int i = 0; i < SIZE; ++i)
我可以直接引用向量的 SIZE,而不是一些常数"9"。
我对这不起作用的暗示是,当我这样做时
vector<string>possiblePalindromes(SIZE)
我用 9 个字符串默认值声明大小为 9 的向量。这意味着 {} 中包含的所有内容根本没有被读入向量。
事实上,您正在尝试同时使用两个构造函数初始化std::vector<std::string>
类型的对象。
第一个构造函数如下
explicit vector(size_type n, const Allocator& = Allocator());
第二个构造函数是
vector(initializer_list<T>, const Allocator& = Allocator());
这说不通。
您始终可以使用向量的成员函数size
来获取向量中的元素数。并且您始终可以使用其方法调整矢量的大小resize
.
此外,您可以使用基于范围的 for 循环,其中不需要知道元素的数量。
所以写
vector<string>possiblePalindromes =
{ "A man a plan a canal Panama",
"The rain in Spain",
"No lemon, no melon",
"radar",
"CS1D",
"Was it a cat I saw?",
"Racecar",
"Saddleback",
"dad" };
这是一个演示程序
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<std::string> possiblePalindromes =
{
"A man a plan a canal Panama",
"The rain in Spain",
"No lemon, no melon",
"radar",
"CS1D",
"Was it a cat I saw?",
"Racecar",
"Saddleback",
"dad"
};
std::cout << "The vecor contains " << possiblePalindromes.size() << " elementsn";
std::cout << "They are:n";
for ( const auto &s : possiblePalindromes )
{
std::cout << 't' << s << 'n';
}
return 0;
}
它的输出是
The vecor contains 9 elements
They are:
A man a plan a canal Panama
The rain in Spain
No lemon, no melon
radar
CS1D
Was it a cat I saw?
Racecar
Saddleback
dad
或者,如果你想要恒定的大小,你可以改用std::array
(注意,size 是一个模板参数,如std::string
,而不是在()
传递(:
const int SIZE = 9;
std::array<std::string, SIZE> possiblePalindromes =
{ "A man a plan a canal Panama",
"The rain in Spain",
"No lemon, no melon",
"radar",
"CS1D",
"Was it a cat I saw?",
"Racecar",
"Saddleback",
"dad" };
因为已经给出了一个向量对象的积分参数初始化,即它的大小,阻止了矢量值的初始化。
一次只能宣布其中任何一个。
愿这有帮助
const int SIZE = 9;
vector<string>possiblePalindromes = //
{ "A man a plan a canal Panama",
"The rain in Spain",
"No lemon, no melon",
"radar",
"CS1D",
"Was it a cat I saw?",
"Racecar",
"Saddleback",
"dad" };
possiblePalindromes.resize(SIZE); // decides the size now
for (int i = 0; i < SIZE; ++i)
// ...
相关文章:
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 为什么这种向量声明无效?
- 错误:变量或字段'PrintEntity'声明无效无效打印实体(实体 e);
- 在另一个结构中声明内部结构会导致错误:结构使用无效
- 类外的前向声明有效,但在嵌套时无效
- C++ SPDLOG 编译错误:变量或字段"set_error_handler"声明为无效
- 使用无效指针初始化指针声明符的行为是否未定义?
- 书籍示例在类声明中使用"explicit"关键字。无效吗?
- 将前向声明的类型转换为无效是否合法?
- 最终说明符对单独的声明和定义无效
- 没有变量声明为函数,但错误:二进制表达式的操作数无效
- 声明是否无效()合法,它实际上是什么?
- 声明为无效的变量或字段'name of var'
- 错误:非静态数据成员的使用无效,在此范围内未声明变量
- 声明std ::配对时大小的写入无效
- 声明为无效的变量或字段'Function'
- 如何使用Auto声明无效指针
- C++错误"变量或字段声明为无效"
- C++:"error C4430: missing type specifier - int assumed" 对于构造函数和无效声明