【问题标题】:Expected unqualified-id before ‘[’ token'[' 标记之前的预期 unqualified-id
【发布时间】:2017-05-04 12:36:19
【问题描述】:

我从代码中得到两个错误。我相信这与我创建了一个向量对象有关,该对象包含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] << " ";

}

【问题讨论】:

  • 您遇到的实际错误是什么?
  • main.cpp:38:30: error: '[' token if((cases[i].[j]) == seen[w]);
  • 向量从索引 0 开始,到 size() - 1 结束。
  • cin &gt;&gt; M[j]; 导致未定义的行为,因为 M 为空

标签: c++ vector g++


【解决方案1】:

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

            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 到 &lt; array_length
  • cin &gt;&gt; M[j]; 无效,因为 vector 为空。将int.push 读入向量中
  • 您应该在读取循环的每次迭代中清空 M 向量,否则它仍会包含上一次迭代的值(我确定这不是您想要的)

【讨论】:

  • 我确实删除了“。” .在运行时,我得到“退出代码 139(被信号 11:SIGSEGV 中断)”。 case 不是二维数组,而是一个包含 int 类型向量数组的向量对象。@InternetAussie
【解决方案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,并且它们以 size 结束,所以数字必须小于,不小于等于 size,并且索引应该从 0 开始。

【讨论】:

  • 它编译,我得到一个运行时错误删除“。”意味着 case 是一个二维数组。@Arnav Borborah
  • 不是二维数组吗?案例是一个二维数组,或者更具体的向量。如果您检查您的代码,您将其声明为:vector&lt;vector&lt;int&gt;&gt; cases;
猜你喜欢
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 2013-07-06
  • 1970-01-01
相关资源
最近更新 更多