我从我的真实代码中推断出这个示例代码:
vector<vector<unsigned short int> > v;
vector<unsigned short int> c;
vector< vector<unsigned short int> > *suffC;
vector<unsigned short int> d;
int index =0;
c.push_back(2);
c.push_back(3);
v[0]=c;
suffC = &v;
d = suffC[index];
最后一条指令在编译时给出了错误。对于编译器来说,两个操作数(operator =)就是两种不同的类型。 我哪里错了?
答案 0 :(得分:2)
按照C&C的规则,C ++以两种方式处理指针:
*
应用于他们,[]
应用于它们。当您将下标应用于指针suffC
时,C ++使用第二个选项 - 它将您的指针视为向量矢量数组。为了获得正确的赋值,首先将*
应用于指针,然后应用下标。这将确保应用std::vector
的自定义下标运算符。
请注意\[\]
has higher precedence than *
,因此您需要在*suffC
周围添加括号:
(*suffC)[...]
答案 1 :(得分:0)
对于defualt,v的大小为零,当我们使用重载字符[]时,这将是编译错误。