功能传递地图的异常错误

时间:2013-12-27 04:49:03

标签: c++ sfml

我不太了解可能导致这种情况发生的全部情况,我对此功能进行了大量修改,但似乎这不是一个功能问题,而是一个问题。函数调用这个函数。

main(){
    //set up variables...
    //theVector is made on the spot using a constructor
    Player thePlayer(proper, variables, here);
    Map theMap();
    theMap.functionThatAddsValues(stuff);
    std::map<ObjectName, Drawing> theMap;
    //This map is filled by using theMap[ObjectName::TheObject] since
    //this is mapped by its first values being enumerated data.
    movement(theVector, thePlayer, theMap, theDrawings);
    //other stuff
}

void movement(sf::Vector2f theVector, Player thePlayer, Map theMap, std::map<ObjectName, Drawing> theDrawings){
    //use the joyous variables
}

如果这个信息太模糊,我可以在文件的后面做一个代码转储链接,我只是认为代码太大了,不能完整地发布在这里,因为它有我计划删除的函数和代码行由于弃用和尚未完成的功能(如错误所示)。

编辑:忘记提及错误:

/home/sir-lulzalot/Testland/sfml/SFMLink/main.cpp:277: error:
 undefined reference to `movement(sf::Vector2<float>, Player, Map, std::map<ObjectName,
 Drawing, std::less<ObjectName>, std::allocator<std::pair<ObjectName const, Drawing> > >)'

Edit2:这是main.cpp http://pastebin.com/TyCzWyfK

的转储

Edit3:Derp找到答案。

2 个答案:

答案 0 :(得分:3)

首先,这条线可能不会按照您的想法行事:

Map theMap();

这声明了一个名为theMap的无参数函数,它返回Map。 (见here的原因)。我猜你可能打算创建一个名为theMap的{​​{1}}类型的变量,在这种情况下你需要删除括号。

然后对Map类型的变量使用相同的名称(theMap)。我要冒另一个猜测并说你打算将这个变量称为std::map<ObjectName, Drawing>

除此之外,您还没有显示变量theDrawingtheVector的代码,因此如果您想要更多答案,我建议您整理SSCCE。或者换句话说,不要遗漏任何产生错误所必需的代码。

答案 1 :(得分:1)

这是一个链接器错误。

您没有一致的声明和定义。

这是文件顶部的移动功能声明:

void movement(sf::Vector2f, Player, Map, std::map<ObjectName, Drawing>);

这是运动功能的定义:

void movement(sf::Vector2f theVector, Player &thePlayer, Map &theMap, std::map<ObjectName, Drawing> theDrawings){

请注意,定义采用Player&,而声明采用Player