【问题标题】:Bizzare error in code::blocks代码中的奇怪错误::blocks
【发布时间】:2015-10-23 14:24:29
【问题描述】:

我在第 1 行收到错误:“宏名称必须是标识符” 我无法解决这个问题,也找不到解决方案。 我不确定为什么会出现此错误,因为当我使用 Dev c++ 时它很好,但同时程序由于数组太长而崩溃,这在具有此长度的 Code::blocks 中不会发生某种原因.

#include <iostream>
using namespace std;
int main(){
    int n,m,t,l [800] [100],p1[100001],p2[100001],k1[100001],k2[100001],a1[100001],a2[100001],trsa[2],aia[2],swtch0,swtch1,swtch_u,krmbl[2];
    cin>>n;
    cin>>m;
    for(int yi=0;yi<n;yi++){
        for(int y=0;y<m;y++){
            cin>>l[y] [yi];
        }
    }
    cin>>t;
    for(int o=0;o<t;o++){
        cin>>p1[o];
        cin>>p2[o];
        cin>>k1[o];
        cin>>k2[o];
        cin>>a1[o];
        cin>>a2[o];
        p1[o]--;
        p2[o]--;
        k1[o]--;
        k2[o]--;
        a1[o]--;
        a2[o]--;
    }

    for(int o=0;o<t;o++){
        trsa[0]=0;
        if(p1[o]>k1[o]){
            trsa[0]=p1[o]-k1[o];
        }else if(p1[o]<k1[o]){
            trsa[0]=p1[o]+k1[o];
        }
        trsa[1]=0;
        if(p2[o]>k2[o]){
            trsa[1]=p2[o]-k2[o];
        }else if(p2[o]<k2[o]){
            trsa[1]=p2[o]+k2[o];
        }

        for( aia[0]=p1[o];aia[0]<trsa[0];aia[0]++){
            krmbl[0]=krmbl[0]+l[aia[0]] [aia[1]];
            if(aia[0]==a1[o]){
                if(aia[1]==a2[o]){
                    swtch0=1;
                }
            }

        }
        for( aia[1]=p2[o];aia[1]<trsa[1];aia[1]++){
            krmbl[1]=krmbl[1]+l[aia[0]] [aia[1]];
            if(aia[0]==a1[o]){
                if(aia[1]==a2[o]){
                    swtch0=1;
                }
            }
        }
        for( aia[1]=p2[o];aia[1]<trsa[1];aia[1]++){
            krmbl[1]=krmbl[1]+l[aia[0]] [aia[1]];
            if(aia[0]==a1[o]){
                if(aia[1]==a2[o]){
                    swtch1=1;
                }
            }

        }
        for( aia[0]=p1[o];aia[0]<trsa[0];aia[0]++){
            krmbl[0]=krmbl[0]+l[aia[0]] [aia[1]];
            if(aia[0]==a1[o]){
                if(aia[1]==a2[o]){
                    swtch1=1;
                }
            }

        }
        if(krmbl[1]>krmbl[0]){
            if(swtch1==1){
                cout<<"TAK"<<endl;

            }else{
                cout<<"NIE"<<endl;
            }
        }else if(krmbl[1]<krmbl[0]){
            if(swtch0==1){
                cout<<"TAK"<<endl;

            }else{
                cout<<"NIE"<<endl;
            }

        }else{
            if(swtch0==1){
                cout<<"TAK"<<endl;

            }else{
                cout<<"NIE"<<endl;
            }
        }
        if(swtch1==1){
                cout<<"TAK"<<endl;

        }else{
                cout<<"NIE"<<endl;
        }
    }
}

【问题讨论】:

  • 预感:尝试消除l [800] [100]中的空格。
  • 这在 MSVC 2013 中编译得很好。
  • ...它在 gcc 4.92 下编译。你用的是什么编译器?
  • code::blocks 编译器你知道安装程序附带的那个
  • 也可以很好地编译 C::B 13.12, gcc 9.2。从构建日志中逐字发布编译器命令行和错误消息。

标签: c++ arrays macros codeblocks iostream


【解决方案1】:

您也可以通过全局声明所有数组来使其在 Dev C++ 中运行。 全局声明的大型数组(即在堆上)是可能的,如果您在主函数或任何函数中声明任何内容,它会进入具有较小大小的堆栈,因此您的数组无法正常工作。尝试全局声明它,它应该可以工作。

【讨论】:

  • 感谢这肯定有帮助,因为我真的习惯了 Dev c++
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2014-04-09
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多