为什么相同的语句不适用于 C++ 中的 Class 成员?
Why the same statement doesn't work for Class member in C++?
我是 C++ 的新手,下面是我的程序。它定义了一个嵌套向量。
#include <vector>
using namespace std;
int main(int argc, char *argv[]) {
vector<vector<int>> grid(10, vector<int>(10, 10000));
return 0;
}
当我将相同的向量定义为class成员时,它报告语法错误:
#include <vector>
using namespace std;
class Test {
public:
vector<vector<int>> grid(10, vector<int>(10, 10000));
};
int main(int argc, char *argv[]) {
vector<vector<int>> grid(10, vector<int>(10, 10000));
return 0;
}
如何定义 vector<vector<int>>
类型的 class 成员并用 10 vector<int>(10, 10000)
初始化它?我试图在构造函数中声明变量并初始化它,但编译器报告 C:\my_projects\cpp1\main.cpp(8): error C2064: term does not evaluate to a function taking 2 arguments
.
#include <vector>
using namespace std;
class Test {
public:
Test() {
grid(10, vector<int>(10, 10000));
}
public:
vector<vector<int>> grid;
};
int main(int argc, char *argv[]) {
vector<vector<int>> grid(10, vector<int>(10, 10000));
return 0;
}
你可以为 default member initializer (C++11 起)使用花括号初始化器或等号初始化器,它不支持圆括号初始化器;正如错误消息所说,它试图被解释为函数。
例如
class Test {
public:
vector<vector<int>> grid{10, vector<int>(10, 10000)};
};
或
class Test {
public:
vector<vector<int>> grid = vector<vector<int>>(10, vector<int>(10, 10000));
};
您的构造函数初始值设定项错误。它应该是(“:”之后的初始化程序)。
示例 (Live):
class Test {
public:
Test() : grid(10, vector<int>(10, 10000))
{
// grid(10, vector<int>(10, 10000)); error: this is not initializer
// grid = vector<vector<int>>(10, vector<int>(10, 10000)) - this is ok
}
public:
vector<vector<int>> grid;
};
并且对于 in-class 成员初始化,您可以使用花括号 '{' 或 '=' 来避免大多数 vexing parse problem (Live):
class Test {
public:
vector<vector<int>> grid{10, vector<int>(10, 10000)};
};
我是 C++ 的新手,下面是我的程序。它定义了一个嵌套向量。
#include <vector>
using namespace std;
int main(int argc, char *argv[]) {
vector<vector<int>> grid(10, vector<int>(10, 10000));
return 0;
}
当我将相同的向量定义为class成员时,它报告语法错误:
#include <vector>
using namespace std;
class Test {
public:
vector<vector<int>> grid(10, vector<int>(10, 10000));
};
int main(int argc, char *argv[]) {
vector<vector<int>> grid(10, vector<int>(10, 10000));
return 0;
}
如何定义 vector<vector<int>>
类型的 class 成员并用 10 vector<int>(10, 10000)
初始化它?我试图在构造函数中声明变量并初始化它,但编译器报告 C:\my_projects\cpp1\main.cpp(8): error C2064: term does not evaluate to a function taking 2 arguments
.
#include <vector>
using namespace std;
class Test {
public:
Test() {
grid(10, vector<int>(10, 10000));
}
public:
vector<vector<int>> grid;
};
int main(int argc, char *argv[]) {
vector<vector<int>> grid(10, vector<int>(10, 10000));
return 0;
}
你可以为 default member initializer (C++11 起)使用花括号初始化器或等号初始化器,它不支持圆括号初始化器;正如错误消息所说,它试图被解释为函数。
例如
class Test {
public:
vector<vector<int>> grid{10, vector<int>(10, 10000)};
};
或
class Test {
public:
vector<vector<int>> grid = vector<vector<int>>(10, vector<int>(10, 10000));
};
您的构造函数初始值设定项错误。它应该是(“:”之后的初始化程序)。 示例 (Live):
class Test {
public:
Test() : grid(10, vector<int>(10, 10000))
{
// grid(10, vector<int>(10, 10000)); error: this is not initializer
// grid = vector<vector<int>>(10, vector<int>(10, 10000)) - this is ok
}
public:
vector<vector<int>> grid;
};
并且对于 in-class 成员初始化,您可以使用花括号 '{' 或 '=' 来避免大多数 vexing parse problem (Live):
class Test {
public:
vector<vector<int>> grid{10, vector<int>(10, 10000)};
};