Неоднозначная ссылка на тип размера Cocos2d-x

Я хочу реализовать некоторые вызовы objective c в проект c++, т.е. пытаюсь сделать то же самое, что и "этот вопрос" (компилировать определенные файлы как объективный С++)

но затем я получаю ошибки «Неоднозначные ссылки» для этой строки кода:

Size visibleSize = Director::getInstance()->getVisibleSize();

сообщение "Ссылка на "Размер" неоднозначна"

мои текущие настройки компилятора:

C Lang Dialect : GNU99[-std=gnu99]
Compiler Sources As : According to File Type

C++ Language Dialect : GNU++14[-std=gnu99]
C++ Standard Library : libc++ (LLVM C++ standard library with c++11 support)

person Suman Maharjan    schedule 31.03.2016    source источник
comment
Это все, что говорит вам сообщение об ошибке?   -  person trojanfoe    schedule 31.03.2016
comment
Любой файл с суффиксом .mm будет рассматриваться как Objective-C++.   -  person Avi    schedule 31.03.2016


Ответы (1)


Проблема в том, что тип Size существует в Cocos2d-x и где-то еще в файлах заголовков, которые видел компилятор.

К счастью, все Cocos2d-x определено в своем собственном пространстве имен, поэтому вам нужно сделать следующее в файле (файлах)-нарушителе:

  1. Удалите USING_NS_CC из верхней части файла реализации.
  2. Добавьте пространство имен cocos2d:: к любым ссылкам на типы и классы Cocos2d-x в файле реализации, например:

    cocos2d::Size visibleSize = cocos2d::Director::getInstance()->getVisibleSize();
    

Это говорит компилятору, какой именно тип Size вы имеете в виду.

Также Cocos2d-x поддерживает C++11, но не C++14, насколько мне известно, поэтому измените это в настройках сборки.

person trojanfoe    schedule 31.03.2016
comment
Ух ты! идеальное объяснение мне нужно. Я застрял на этом уже несколько дней. Спасибо @trojanfoe! - person Suman Maharjan; 31.03.2016