Создаю заголовочный файл и объявляю в неё простронство имён:
//файл functions.h
#ifndef _FUNCTIONS_H_
#define _FUNCTIONS_H_#include <math.h>
namespace functions
{struct Vector
{
float speed;
float alpha;
};struct Projections
{
float onX;
float onY;
};struct PointF
{
float x;
float y;
};Vector speedVector( Projections *projections ); /*<<<<эта строчка*/
}#endif //_FUNCTIONS_H_
//конец файла
Потом пытаюсь использовать его в другом проекте, который состоит из одного файла:
//файл testReflectFunctions
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif#include <iostream>
#include <cstdlib>#include </home/Alexandr/Documents/Projects/OpenGLApp/functions.h>
using namespace std;
using namespace functions;int main(int argc, char *argv[])
{
Projections projections;
Projections * pProjections;
pProjections = &projections;
projections.onX = 1.2;
projections.onY = 2.1;
Vector vec = speedVector( &projections ); /*<<<<< эта строчка*/
return EXIT_SUCCESS;
}
//конец файлакомпилятор выводит сообщение об ошибке:
/home/Alexandr/Documents/Projects/testReflectFunctions/src/testreflectfunctions.cpp:41: undefined reference to `functions::speedVector(functions::Projections*)'В файле реализации functions.cpp вообще убрал описание функции и её заголовок - ничего не меняется. Может я где-то ещё должен указывать (может быть в опциях какого-нибудь automake) то, что я использую это пространство имён?
>#include </home/Alexandr/Documents/Projects/OpenGLApp/functions.h>Вы уверены, что не хотите использовать относительный путь? Даже если и используете полный, лучше указывать #include "", потому что <> ищет в стандартных каталогах, а "" -- нет.
>компилятор выводит сообщение об ошибке:
>/home/Alexandr/Documents/Projects/testReflectFunctions/src/testreflectfunctions.cpp:41: undefined reference to `functions::speedVector(functions::Projections*)'Это ошибка линковщика, а не компилятора. Вы файл functions.cpp скомпилировать в программу не забыли? Там функция объявлена как положено?
Большое спасибо! Их необходимо было указать в Automake manager ( я сделал это на вкладке справа ). Действительно сначала их нужно с линковать, а потом они нормально компилируются! Всё работает как часы!