map.insert:&#34;无效的参数&#34;配对错误<enum,vector <*>&gt;

时间:2017-04-28 09:42:11

标签: c++ dictionary vector enums

编辑4:好的,我把问题缩小到一个小的cpp文件,给出了每个人都可以重现的错误信息:

#include<vector>
#include<map>
using namespace std;

namespace{enum class Colors{Black,White};}

class dummyClass{};

class MapTest
{
    vector<dummyClass*> Dummys;
    map<Colors,vector<dummyClass*>> dummyMap;
public:
    MapTest()
    {
        Dummys.push_back(new dummyClass);
        Dummys.push_back(new dummyClass);
        dummyMap.insert(make_pair(Colors::White,Dummys));
    }
    ~MapTest()
    {
        for(unsigned int i=0;i<Dummys.size();++i)
        {
            delete Dummys[i];
        }
        Dummys.clear();
        dummyMap.clear();
    }

};

int main()
{
    MapTest m;
}

编辑3:如果有人想知道。我删除了析构函数中的所有指针。没有发布,因为我认为它与问题无关

编辑2:在.cpp文件中添加了更多详细信息。课程&#34;鲍尔&#34;和&#34;职位&#34;不应该有任何相关性。

我的头文件match.h:

#include <map>
#include"Bauer.h"
class Match
{
    int counter{0};
    std::vector<Figuren*> allFiguresWhite;
    std::vector<Figuren*> allFiguresBlack;
    std::map<Farben,std::vector<Figuren*>> samePlayerFig;
    std::map<Farben,std::vector<Figuren*>> otherPlayerFig;
   //more code...
}

&#34;法本&#34;只是一个枚举:enum class Farben{black, white}; 在我的match.cpp中,我尝试在一点上将par插入地图:

#include "match.h"
using namespace std;

Match::Match()
{
    cout<<"Let the games begin\n";
    InitGame();
}

void Match::InitGame()
{
    for(int i=1;i<9;i++)
    {
        allFiguresWhite.push_back(new Bauer(Position{2,i},Farben::white, counter++));
        allFiguresBlack.push_back(new Bauer(Position{7,i},Farben::black,counter++));
    }
    samePlayerFig.insert(make_pair(Farben::white,allFiguresWhite));
    //more code...
}

不幸的是我得到了编译错误&#34;无效的参数&#39; &#34;在这一行中&#34;插入&#34;在红色下划线。 知道我做错了什么吗?

编辑: 这是完整的错误消息

  

无效的参数&#39;候选人是:   的std ::对&GT;&GT;&GT;,&布尔GT;   insert(const std :: pair&gt;&gt;&amp;)std :: pair&gt;&gt;&gt;,bool&gt;   insert(#10000&amp;&amp;)void insert(std :: initializer_list&gt;&gt;&gt;)   的std :: _ Rb_tree_iterator&GT;&GT;&GT; insert(std :: _ Rb_tree_const_iterator&gt;&gt;&gt;,const   的std ::对&GT;&GT; &amp;)std :: _ Rb_tree_iterator&gt;&gt;&gt; insert(std :: _ Rb_tree_const_iterator&gt;&gt;&gt;,#10000&amp;&amp;)   void insert(#10000,#10000)&#39; match.cpp / chessGame第17行语义   错误

1 个答案:

答案 0 :(得分:1)

好的,这似乎是Eclipse特定的错误。我使用“g ++ main.cpp -o main”从命令行编译了Test programm,它运行正常。要看看为什么它不适用于eclipse。到目前为止,我已经编译了很多项目,从来没有任何编译器问题。