我正在编写一个我需要2D数组并想要使用2D矢量的类。但是,我需要首先将2D数组声明为私有,然后在我的构造函数中分配内存。当我按照以下方式进行操作时,我得到“没有适当的operator()或类型转换函数的类型对象的调用”指针到函数类型“错误。有谁可以帮助我?
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));
答案 0 :(得分:4)
DynTable
是一个变量。你的代码就像在做:
int y;
y(5);
表达式 variablename (
表达式 )
表示调用函数。但是y
和DynTable
不是函数,因此是错误。
我认为您打算使用ctor-initializer列表:
Test(const string &s1, const string &s2)
: DynTable( s1.size() + 1, vector<unsigned int>(s2.size() + 1) )
{
// other code here perhaps
}
在ctor-initializer列表中,它不是表达式,而是初始化语法。在初始化列表的上下文中,( )
分隔参数用于初始化变量。
另一种选择是在构造函数体中编写
DynTable = vector<vector<unsigned int>>(len1 + 1, vector<unsigned int>(len2 + 1));
然而这更糟糕,因为它更多的是打字,它会做一个默认的构造,然后是一个赋值而不是直接构造你想要的东西。