Это странная проблема, и мне было интересно, видел ли кто-нибудь еще. Мы пишем кроссплатформенный код C ++ для Mac и ПК, и это происходит только на Mac.
Скажем, у меня есть класс, чей файл .h выглядит следующим образом.
class X {
public:
int _myValue;
void myFunction();
}
И у меня есть другой класс, чей .h файл выглядит так:
#include "X.h"
class Y {
private:
X _myObj;
}
Это не скомпилируется. Мы получаем ошибку, указывающую, что X не определен. Решение состоит в том, чтобы добавить предварительное объявление для X в файле Y.h, например:
класс X;
Мы занимались этим некоторое время, но сейчас мы попадаем в ситуации, когда это не так хорошо работает. Например, если у нас есть файл .h, у которого есть метод шаблонов, определенный в файле .h, и этот метод ссылается на метод в другом классе, компилятор ничего об этом не знает. Аналогично, если мы ссылаемся на enum, который определен в классе, который был включен, компилятор не распознает его (обходной путь для этой проблемы - поместить enum в отдельный файл .h, и он его отлично подобрал).
Похоже, что при компиляции файла .cpp компилятор не извлекает данные из включенного файла .h.
Мне было просто интересно, видел ли кто-нибудь что-нибудь подобное или имелись возможные пути расследования.
Большое спасибо ...