【发布时间】:2019-07-02 14:28:02
【问题描述】:
我是 C++ 新手,遇到了这个问题。这是我的代码:
class A
{
std::vector <int> vec(10);
};
它给了我错误说expected a type specifier。我知道这种初始化向量的方式是不可接受的,应该在构造函数中完成,但我很好奇为什么会失败。我还注意到这一点:
class A
{
std::vector <int> vec = std::vector<int>(10);
};
工作得很好。
所以我的问题是,即使我们仍在创建具有“预定义大小”(std::vector<int>(10))的向量,为什么第二种情况仍然有效,为什么第一种情况会失败?谢谢。
附言
我正在尝试创建大小为 10 个整数的向量,而不是创建已插入 10 的向量。
【问题讨论】:
-
这是因为首先 sn-p 声明了一个名为
vec的函数,该函数返回std::vector<int>并接受参数。我想这是重复的,但也许有更好的:My attempt at value initialization is interpreted as a function declaration, and why doesn't A a(()); solve it? -
C++11 或更高版本?使用
{20}而不是(20)。您声明了一个接受语法错误并返回std::vector<int>的函数。 -
感谢您的回复。我试图创建一个为 6 个成员分配内存的向量,
{20}会这样做吗? -
这不是最令人头疼的解析错误。这是一个变量定义,但在某个地方是不允许的。
-
@mch 对于
vector,因为它有 initializer_list 构造函数,所以它们不一样。vector<int>(20):20 个元素,值为 0。vector<int>{20}:只有一个元素,值为 20。
标签: c++ visual-studio class vector