我正在编写一个类,其中我需要一个2D数组,并希望使用2D向量。但是,我需要首先将2D数组声明为私有,然后在构造函数中分配内存。当我这样做时,我得到了一个“调用类类型的对象而没有适当的操作符()或将函数转换为指针到函数类型”的错误。有人能帮我吗?
class Test {
private:
vector<vector<unsigned int> > DynTable;
public:
Test(const string &s1, const string &s2) {
const size_t len1 = s1.size(), len2 = s2.size();
DynTable(len1 + 1, vector<unsigned int>(len2 + 1));发布于 2014-06-22 11:28:59
DynTable是一个变量。您的代码就像执行以下操作:
int y;
y(5);表达式变量名(表达式)意味着调用函数。但是y和DynTable不是函数,因此出现了错误。
我想你是想用一个初始化程序列表:
Test(const string &s1, const string &s2)
: DynTable( s1.size() + 1, vector<unsigned int>(s2.size() + 1) )
{
// other code here perhaps
}在ctor初始化程序列表中,它不是表达式,而是初始化语法。在初始化列表的上下文中,( )分隔用于初始化变量的参数。
另一种选择是在构造函数体中编写
DynTable = vector<vector<unsigned int>>(len1 + 1, vector<unsigned int>(len2 + 1));但是,这更糟糕,因为它更多的是键入,它执行默认的构造,然后执行赋值,而不是直接构造所需的内容。
https://stackoverflow.com/questions/24350756
复制相似问题