【问题标题】:Program expects a bracket, but there is one there already there程序需要一个括号,但那里已经有一个
【发布时间】:2013-12-05 01:29:20
【问题描述】:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <iomanip>

using namespace std;

#define ARRAYSIZE  15;


int main(void)
{
    //things needed
    ifstream infile;
    ofstream outfile;

    double xArray[ARRAYSIZE];


}

如您所见,我的代码应该井井有条,但我的程序一直告诉我它需要一个 '[' xArray[ARRAYSIZE] 所在的位置。顺便说一句,我使用的是 microsoft visual studio 2013。

【问题讨论】:

  • \#define 不应该有 ;
  • 预处理后查看代码
  • 不要使用宏,我的朋友。

标签: c++ arrays brackets mismatch


【解决方案1】:
#define ARRAYSIZE 15

#define 中取出;

你的#define按原样写,

double xArray[ARRAYSIZE];

翻译成

double xArray[15;];

编译器希望在第一个 ; 之前有一个 ]


这样做:

const int ARRAYSIZE 15;

可能会更好......

【讨论】:

  • +1 建议使用 const int 而不是定义。更好的 C++ 实践。
  • 是的。我主要使用Objective-C,因此,我实际上有时会使用#define,但不管是什么语言,当我做这样简单的事情时,我会使用const int(或enum在某些情况下)情况,视情况而定)。
  • nhgrif, #defines 应该是 C++ 中的最后手段,因为它们是如何应用的(我同意它们有时是有用的和/或有用的)。由于发生的翻译/编译阶段,C/C++ 有点独特。说一个常数 #define pi 3.14 可能看起来无害,但稍后在一个不相关的地方,其他人可能会声明一个 double pi = 3.14159。但是,如果首先出现预处理器版本,第二个无辜的实例将被转换为double 3.14 = 3.14159,这显然是一个错误。
  • 哦,我同意。我的评论的意思是,由于我最常使用 Objective-C 进行编码,因此我有时会使用 #define ......但这些场合几乎总是在编写 Objective-C 代码时出现。我几乎从不在C++#define
【解决方案2】:

预处理后,您的代码有点

int main(void)
{
    //things needed
    ifstream infile;
    ofstream outfile;

    double xArray[15;];  // replace ARRAYSIZE with 15;
}

所以你必须在#define中删除;

#define ARRAYSIZE  15

【讨论】:

    【解决方案3】:

    #define ARRAYSIZE 15;

    Define 将 ARRAYSIZE 替换为它旁边的任何内容。

    所以在这种情况下,它会将ARRAYSIZE 替换为15;

    所以你需要做的只是删除定义语句中的分号

    【讨论】:

      猜你喜欢
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2015-01-10
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多