c++ vs编译有错误双击error跳转到内部结构实现,怎么知道是哪句出错了?

如果是异常还能用过调用堆栈定位错误,编译器的错误该怎么定位?

clipboard.png

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include<cmath>
#include <map>
using namespace std;
stringstream ss;

int main()
{
    int n,m;
    cin>>n>>m;
    vector<multimap<int,char*>> vm;
    map<char*,vector<int>> info;
    int i=0;
    int a,c,math,e;char id[8];
    while(i<n)
    {
        scanf("%s",id);
        cin>>c>>math>>e;
        a=(c+math+e)/3;
        vm[0].insert(pair<int,char*>(a,id));
        vm[1].insert(pair<int,char*>(c,id));
        vm[2].insert(pair<int,char*>(math,id));
        vm[3].insert(pair<int,char*>(e,id));
        vector<int> v(4);
        v[0]=a;v[1]=c;v[2]=math;v[3]=e;
        info.insert(pair<char*,vector<int>>(id,v));
        i++;

    }
    vector<map<int,char*,greater<int>>> vmm;
    
    for(int i=0;i<4;i++)
    {
        int count=0;
        auto it=vmm[i].begin();
        while(it!=vmm[i].end())
        {    
            count+=vmm[i].count(it->first);
            vmm[i].insert(it->first,count);
            int i=count;
            while(i--)
                it++;
        }
    }
    char arrstr[2001][8];   //[m][6]
    i=0;
    while(i<m)
        scanf("%s",arrstr[i++]);

    i=0;
    while(i<m)
    {
        char c;
        if(info.find(arrstr[i])==info.end())  //
        {cout<<"N/A";i++;continue;}
        auto vGrade=info[arrstr[i]];
        int rank=2000;
        for(int i=0;i<4;i++)
        {
            auto it=vmm[i].find(vGrade[i]);int gap=1;
            while(it!=vmm[i].begin())
            {
                gap++;
                it--;
            }
            rank=rank<gap?rank:gap;
            if(rank>gap)
            {
                rank=gap;
                if(i==0) c='A';
                else if(i==1) c='C';
                else if(i==2) c='M';
                else c='E';
                    
            }
            cout<<rank<<" "<<c;
        }
        i++;
    }



    system("pause");
    return 0;
}
阅读 2.2k
1 个回答
  1. C++的代码为什么要放java的标签?
  2. 问题排版成这样难道不知道编辑吗?

言归正传
编译报错是最好debug的错误之一,所有的错误编译器都明确告诉你了

请看代码中的这一行:

vmm[i].insert(it->first,count);

这里vmm[i] 是一个 map<int,char*>, 且不说插入值的时候需要用pair<int, char*>包装键值对,it->first是一个intcount也是一个int,值的类型和map的定义不符。

如果不在乎insert的返回值的话,个人觉得用map[key] = value的方式更简洁

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题