Const正确性 - 如何在C ++中访问向量向量的元素?

时间:2013-03-04 23:32:29

标签: c++ vector const

我有一个整数向量的向量,向量具有唯一的长度。我想分配一个索引 - 一个整数i到整数。例如,如果向量V包含2个向量,并且第一向量V.at(0)是长度2,并且第二向量V.at(1)是长度4,则索引3将对应于第一个元素。第二个向量,V.at(1).at(0)。

我得到的错误我怀疑与const正确性有关。我该如何解决?

Class A{
...
}

   A func(int i) const {
    int j = 0;
    int sum = 0;
    int u = 0;

    // stop when pass by the j-th vector which i is found
    while (sum < i){
        sum = sum + V.at(j).size();
        ++j;
    }

    // return the position
    u = V.at(j).at(i-sum);
    return A(std::make_pair<j, u>);   
  }

错误讯息:

error: the value of 'j' is not usable in a constant expression
     return A(std::make_pair<j, u>);   
                                      ^
note: 'int j' is not const
     int j = 0;
               ^
error: the value of 'u' is not usable in a constant expression
     return A(std::make_pair<j, u>);   
                                         ^
                                         ^
note: 'int uid' is not const
     int u = V.at(j).at(i-sum);

1 个答案:

答案 0 :(得分:4)

应该是括号,而不是尖括号:

return A(std::make_pair(j, u));

尖括号用于模板参数,只能是类型和常量。这就是编译器抱怨变量不是常量的原因。