Сегодня долго бился с указанной проблемой при сборке-компиляции проекта на c++ под debian. Решение было в итоге найдено.
Для некоторого класса была объявлена friend-функция. Всё объявление класса я приводить не буду, только структуру класса и объявление самой функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Mat3D { public: //конструкторы ... Mat3D (); //набор функций и афинных преобразований ... //в том числе злополучная функция friend Mat3D R_x(double RotAngle); private: //свойства класса }; |
Объявление и реализацию класса разместил в файлах Mat3D.h и Mat3D.cpp соответственно.
Далее в другом файле проекта Calc.cpp я пытался вызвать эту функцию, на что получал загадочное сообщение:
1 |
'R_x' was not declared in this scope. |
Хотя файл Mat3D.h успешно компилировался и был подключен в начале Calc.cpp.
Описывать все идеи и попытки помочь «увидеть» функцию компилятор не стану. Помогло дополнительно объявление функции после класса Mat3D. Вот так:
1 2 3 4 5 6 7 |
class Mat3D { ... }; //добавил объявление еще раз Mat3D R_x(double RotAngle); |
Надеюсь кому то тоже поможет, ибо решения в сети так и не нашел. Люди писали о схожих проблемах, сетуя на то, что под Windows компилируется нормально, а в Unix такая вот проблема.