1

整数のベクトルのベクトルがあり、ベクトルの長さは一意です。インデックスを割り当てたい-整数 i を整数に。たとえば、ベクトル V に 2 つのベクトルが含まれ、最初のベクトル V.at(0) の長さが 2 で、2 番目のベクトル V.at(1) の長さが 4 の場合、インデックス 3 は、 2 番目のベクトル、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);
4

1 に答える 1

4

山かっこではなく、かっこにする必要があります。

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

山かっこは、型と定数のみを指定できるテンプレート引数用です。そのため、コンパイラは、変数が定数ではないことについて文句を言います。

于 2013-03-04T23:38:48.177 に答える