在'['标记之前预期的不合格标识

时间:2017-05-04 12:36:19

标签: c++ vector g++

我从代码中得到两个错误。我相信它们与我创建了一个矢量对象这一事实有关,该矢量对象包含int类型的矢量对象(即矢量矢量)。当我尝试使用下标运算符访问向量对象中的向量数组时,我收到一条错误消息,该消息与此帖的标题相同。

这是我的代码:

int main()
{
    vector<int> M;
    vector<vector<int>> cases;

    int numberOfCase;
    cin >> numberOfCase;
    for(int i = 1; i <= numberOfCase; i++)
    {
        int s;
        cin >> s;
        for(int j = 1; j <= s; j++)
            cin >> M[j];
        cases.push_back(M);

    }
    // determine size of M;
    vector<int> seen;
    for(int i = 1; i <= cases.size(); i++)
    {

        for(int j = 1; j < cases[i].size(); j++)
        {
            for(int w = 1; w < seen.size(); w++)
            {
                if(cases[i].[j] == seen[w]);// error
                else
                    seen.push_back(cases[i].[j]); // error
            }
        }
    }

    for(int i = 1; i <= seen.size(); i++)
        cout << seen[i] << " ";

}

2 个答案:

答案 0 :(得分:3)

您不能像这样进行索引访问:

            if(cases[i].[j] == seen[w]);
            else
                seen.push_back(cases[i].[j]);

将其替换为:

            if(cases[i][j] == seen[w]);
            else
                seen.push_back(cases[i][j]);

请注意删除的点。

你为什么要做这样一个非传统的if结构?我把它写成

            if(cases[i][j] != seen[w])
                seen.push_back(cases[i][j]);

侧面注意:正如其他人指出的那样(我已经注意到了自己:)),您的代码中还有许多其他错误和错误:

  • 您正在尝试使用基于1的索引。 C使用基于0的索引,因此您对类似于数组的对象的循环应该从0到< array_length
  • cin >> M[j];无效,因为vector为空。在矢量
  • 中阅读int.push
  • 你应该在阅读循环的每次迭代中清空M向量,否则它仍将包含上一次迭代的值(我确定不是你想要的)

答案 1 :(得分:2)

根据您的错误,您的问题在于以下几行代码:

for(int j = 1; j < cases[i].size(); j++)
{
    for(int w = 1; w <= seen.size(); w++)
    {
        if(cases[i].[j] == seen[w]); //here
        else
            seen.push_back(cases[i].[j]); //here
    }
}

错误是[i][j]之间有一个点,导致错误。只需删除它。

你遇到的另一个问题是矢量索引从0开始,而不是1,它们以大小结束,所以数字必须小于,不小于等于大小,索引应该从0开始。