2014-01-02 5 views
0

Я использую cocos2d-X, при следующем фрагменте кода:ld: символ (-ы) не найден для архитектуры armv7 - Использование библиотеки?

CCSwipeGestureRecognizer * swipe = CCSwipeGestureRecognizer::create(); 
swipe->setTarget(this, callfuncO_selector(GameplayScene::didSwipe)); 
swipe->setDirection(kSwipeGestureRecognizerDirectionRight | kSwipeGestureRecognizerDirectionLeft); 
swipe->setCancelsTouchesInView(true); 
this->addChild(swipe); 

Я скопировал предоставленные CPP и H файлов через которые я получил, и они добавляются к цели. Однако по какой-то причине ... эта строка:

swipe->setTarget(this, callfuncO_selector(GameplayScene::didSwipe)); 

дает мне проблемы. Я даже не могу понять, что он спрашивает меня, не говоря уже о том, на что нужно ссылаться. Заголовок включен и скомпилирован.

Undefined symbols for architecture armv7: 
    "GameplayScene::didSwipe(cocos2d::CCObject*)", referenced from: 
     GameplayScene::init() in GameplayScene.o 
ld: symbol(s) not found for architecture armv7 

Комментируя линию setTarget, все работает нормально.

+2

«Я даже не могу понять, о чем он меня спрашивает». Наверно, и не можем, так как вы не потрудились поставить точное, ** полное ** сообщение об ошибке в свой вопрос. Я должен предположить, что это 'callfuncO_selector', который отсутствует? – WhozCraig

+0

@WhozCraig Я думал, что название было всем, что было актуально, но я отредактировал в полном тексте. –

+1

Никогда не перестаешь удивлять меня тем, как люди, которые не знают, что не так с их кодом, чувствуют себя квалифицированными, чтобы определить, какие фрагменты информации актуальны, а какие нет! –

ответ

1

простой ответ здесь, что функция не была определена должным образом. Он был определен как:

void didSwipe(CCObject* obj) 
{ 
    exit(0); 
} 

Это должно было быть:

void GameplayScene::didSwipe(CCObject* obj) 
{ 
    exit(0); 
} 

То есть, реализация функции-члена класса, а не только функции в файле.

НО, и я хочу подчеркнуть это, хотя это может быть ответ на конкретный вопрос, я не думаю, что это ответ на вопрос, почему это проблема.

Какой-то редактор, вероятно, прийти и очистить это за то, что не по теме, но я положу его в любом случае ...

Дано:

  1. Автор этого смотреть на это код в течение некоторого времени, прежде чем увидеть его (и я был в чате с ним ... как кажется, по крайней мере один другой был передо мной ... до того, как он был найден).

  2. Автор разместил API в комментариях, и все еще не было очевидно, в чем проблема.

  3. Все люди, которые обсудили и рассмотрели проблему, состоят из (разумного) звукового ума, тела и имеют по крайней мере базовое понимание того, что вы действительно должны сказать компилятору, что функция - это реализация функции класса и а не просто «функция».

Я думаю, что реальный ответ на этот вопрос был:

  1. Не пытайтесь писать код после полуночи ... если вы не естественно, ночной образ жизни.

  2. Не пытайтесь помочь людям отлаживать свой код после полуночи ... если вы не естественно ночные.

  3. Если проблема не кажется очевидной в решении после того, как вы просмотрели ее более 1 часа, уйдите и вернитесь позже.

  4. Не следует кормить разработчиков после полуночи или они могут превратить зло.

Да, мы все нарушили эти правила.

Смежные вопросы