URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6722
[ Назад ]

Исходное сообщение
"пространство имён (оператор namespace)"

Отправлено Qhdocyr , 02-Сен-07 23:23 
Создаю заголовочный файл и объявляю в неё простронство имён:


//файл 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) то, что я использую это пространство имён?


Содержание

Сообщения в этом обсуждении
"пространство имён (оператор namespace)"
Отправлено anonymous , 03-Сен-07 01:05 
>#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 скомпилировать в программу не забыли?  Там функция объявлена как положено?


"пространство имён (оператор namespace)"
Отправлено Qhdocyr , 03-Сен-07 20:41 
Большое спасибо! Их необходимо было указать в Automake manager ( я сделал это на вкладке справа ). Действительно сначала их нужно с линковать, а потом они нормально компилируются! Всё работает как часы!