【问题标题】:primary-expression before ']' error meaning']' 之前的主要表达式错误含义
【发布时间】:2013-04-19 17:40:48
【问题描述】:

我正在尝试修复有错误的代码,但还有一个错误我无法弄清楚。错误说: ']' 标记之前的预期主表达式,这是什么意思?我检查了放错位置的分号和变量名,但找不到任何东西。这是我的代码(我已用错误注释了该行):

// countOnes.cpp
#include<iostream>
#include<cstdlib>
using namespace std;

void countOnes( int array[] ); // Count the number of 1s in a given int array.
const int arraySize = 10;
int array[ arraySize ];
int countOne = 0;

int main()
{
  for ( int i = 0; i <= arraySize; i++ )
  {
    array[ i ] = rand() % 3;  // Fill array with 0, 1 or 2 randomly
    cout << array[ i ] << " ";
  }
  countOnes( array[], arraySize ); //ERROR

  cout << "\n The number of 1s in the array: " << countOne;

  return 0;
}

void countOnes( int array[], int arraySize )
{
  for ( int i = 0; i <= arraySize; i++ )
    if ( array[ i ] == 1 )
      countOne = countOne + 1;
  return;
}

【问题讨论】:

  • 你应该考虑在c++中使用std::vector
  • 不是运行时错误,而是编译器错误

标签: c++ syntax-error


【解决方案1】:

不需要方括号。

countOnes(array[], arraySize);

【讨论】:

    【解决方案2】:
    countOnes( array[], arraySize ); //ERROR
    

    这里不需要 []
    也声明

    void countOnes( int array[] ); // Count the number of 1s in a given int array.
    

    不符合其定义

    void countOnes( int array[], int arraySize )
    

    【讨论】:

    • @user2085224 我可以用同样的方式问你为什么要这样做?当你声明函数时,你声明它的方式是接受数组作为第一个参数。当你调用它时,编译器已经知道数组确实是数组类型(顺便说一句,变量的名字不太好)。因此不需要额外的提示。或者您在输入 [] 时是否有其他意思?
    【解决方案3】:

    'array' 在 Microsoft 的 C 扩展中被视为保留字。 见Why is "array" marked as a reserved word in Visual-C++?。用其他东西替换“数组”,例如'arr'。

    【讨论】:

    • 该线程,尽管它的名称,并没有确定微软的编译器array 视为C 或C++ 中的保留字。这是关于语法荧光笔的。将array 视为保留字会违反语言定义。
    【解决方案4】:

    如果要传递数组,可以将指向第一个元素的指针传递给数组:

     void countOnes( int* array, int size );
    

    【讨论】:

      猜你喜欢
      • 2016-07-22
      • 1970-01-01
      • 2023-04-11
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 2014-11-30
      • 1970-01-01
      相关资源
      最近更新 更多