Необычная ошибка в карте прохождения функции

0

Я не совсем понимаю всю ситуацию, которая могла бы привести к этому, я внес большой вклад в эту функцию, но кажется, что это не проблема функции, а не проблема в функции, вызывающей это функция.

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 нашел ответ.

Теги:
sfml

2 ответа

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.

  • 0
    Нет, он не определяет две переменные с именем theMap . Смотри мой ответ.
  • 0
    Справедливо, но я не думаю, что это корень проблемы, его код, похоже, сильно отредактирован для поста, который, похоже, внес много дополнительных ошибок.
Показать ещё 5 комментариев
3

Для начала эта строка, вероятно, не делает то, что вы думаете, что она делает:

Map theMap();

Это объявляет функцию без параметра с именем theMap которая возвращает Map. (см. здесь по этой причине). Я предполагаю, что вы, вероятно, намеревались создать переменную с именем theMap Map, в этом случае вам нужно удалить круглые скобки.

Затем вы используете одно и то же имя (theMap) для переменной типа std::map<ObjectName, Drawing>. Я собираюсь опасаться еще одной догадки и сказать, что вы имели в виду, что эту переменную называли theDrawing.

Кроме того, вы не theVector код для переменных theVector или theDrawings, поэтому, если вы хотите получить больше ответов, я предлагаю вам собрать SSCCE. Или, другими словами, не оставляйте код, необходимый для генерации ошибки.

  • 0
    pastebin.com/TyCzWyfK Вот копия основного файла, я не верю, что другие .hs / .cpps требуются. Но я могу поставить их по запросу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню