Я не совсем понимаю всю ситуацию, которая могла бы привести к этому, я внес большой вклад в эту функцию, но кажется, что это не проблема функции, а не проблема в функции, вызывающей это функция.
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 нашел ответ.
Это ошибка компоновщика.
У вас нет последовательных деклараций и определений.
Это объявление функции перемещения в верхней части файла:
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
.
Для начала эта строка, вероятно, не делает то, что вы думаете, что она делает:
Map theMap();
Это объявляет функцию без параметра с именем theMap
которая возвращает Map
. (см. здесь по этой причине). Я предполагаю, что вы, вероятно, намеревались создать переменную с именем theMap
Map
, в этом случае вам нужно удалить круглые скобки.
Затем вы используете одно и то же имя (theMap
) для переменной типа std::map<ObjectName, Drawing>
. Я собираюсь опасаться еще одной догадки и сказать, что вы имели в виду, что эту переменную называли theDrawing
.
Кроме того, вы не theVector
код для переменных theVector
или theDrawings
, поэтому, если вы хотите получить больше ответов, я предлагаю вам собрать SSCCE. Или, другими словами, не оставляйте код, необходимый для генерации ошибки.
theMap
. Смотри мой ответ.