奇怪的C ++控制台应用程序错误

时间:2012-06-28 19:20:46

标签: c++

代码看起来像那样

#include <cstdlib>
#include <iostream>

using namespace std;
#define n 3;
#define m 4;

int main(int argc, char* argv[])
{
    int arr[n][m];
    bool f=true;
    for (int i=0; i<n; i++)
        for (int j=0; j<m; j++)
            cin>>arr[i][j];
    for (int i=0; i<n; i++)
        for (int j=0; j<m; j++)
            if(arr[i][j]!=a[0][j])
                f=false;
    if(f)
            cout<<"Setirler eynidir.";
    else 
        cout<<"muxtelifdir";
    system("pause");
    return 0;
}

获得大量错误

enter image description here

我无法看到任何有问题的代码。有什么建议?我错过了什么?

4 个答案:

答案 0 :(得分:8)

#define未以;终止,因此分号实际上也粘贴在那里,产生

int arr[3;][4;];

这是无效代码。

永远记住,避免像瘟疫这样的预处理器。

答案 1 :(得分:4)

由于#define是预处理程序指令,因此您在数组转换中犯了一些错误。

#define n 3;
#define m 4;

int arr[m][n];

// This translates into 
int arr[3;][4;];

您可以通过删除定义后的;来修复它:

#define n 3
#define m 4

甚至更好:

static const size_t n = 3;
static const size_t m = 3;

如上所述,您可以在其他地方使用nm进行类型安全。

答案 2 :(得分:2)

#define 

声明后面没有分号。

<强> [EDIT1] 实际上,他们可以,但要小心,因为这样的预处理器语句将成为严格的文本替换。

答案 3 :(得分:1)

删除#define中的分号。

通过或多或少的复制+将内容粘贴到源文件中来扩展

define。因此

int arr[n][m];

扩展为

int arr[3;][4;];

这显然是语法错误。与你的for循环相同。