Xcode 11 Objective C++ - невозможно отделить реализацию от заголовка в проекте ObjectiveC++

Я создал стандартный проект Xcode Objective-C, желая проверить интеграцию с С++. Я переименовал свой файл соответственно в .mm и т. д.

Я создал класс С++ с заголовком .hpp и файлом imp .cpp. это заголовок

class a {
private:
   int anInt = 1;
public:
    int getAnInt();
};

это бес

#include "PrismMatricies.hpp"

int a::getAnInt() {return anInt;}

в моем файле ViewController.mm я делаю это после импорта заголовка .hpp

a ar;
NSLog(@"Some Log %i", ar.getAnInt());

Код ошибки сборки в Xcode = неопределенный символ: a::getAnInt()

Если я перемещаю определение функции внутри заголовка, как это

class a {
private:
   int anInt = 1;
public:
    int getAnInt();
};

int a::getAnInt() {return anInt;}

Проект работает

Кто-нибудь может мне объяснить, а то я просто не понимаю


person Morten    schedule 24.01.2020    source источник
comment
Обратите внимание, что неопределенный символ является ошибкой ссылки, а не ошибкой компиляции. Похоже, ваш файл .cpp не связан с вашей целью сборки. Убедитесь, что он включен в список источников компиляции вашей цели сборки.   -  person pmdj    schedule 24.01.2020
comment
Вы только что ответили на вопрос. По какой-то причине Xcode не отметил целевое членство в файле .cpp. НИКОГДА бы не подумал о такой простой вещи... Спасибо... Пожалуйста, ответьте на вопрос, чтобы я мог отметить его как правильный ответ   -  person Morten    schedule 24.01.2020


Ответы (1)


Обратите внимание, что «неопределенный символ» — это ошибка ссылки, а не ошибка компиляции, и ваш код, безусловно, выглядит правильно.

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

person pmdj    schedule 24.01.2020