我不太了解可能导致这种情况发生的全部情况,我对此功能进行了大量修改,但似乎这不是一个功能问题,而是一个问题。函数调用这个函数。
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找到答案。
答案 0 :(得分:3)
首先,这条线可能不会按照您的想法行事:
Map theMap();
这声明了一个名为theMap
的无参数函数,它返回Map
。 (见here的原因)。我猜你可能打算创建一个名为theMap
的{{1}}类型的变量,在这种情况下你需要删除括号。
然后对Map
类型的变量使用相同的名称(theMap
)。我要冒另一个猜测并说你打算将这个变量称为std::map<ObjectName, Drawing>
。
除此之外,您还没有显示变量theDrawing
或theVector
的代码,因此如果您想要更多答案,我建议您整理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
。