The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"пространство имён (оператор namespace)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"пространство имён (оператор namespace)"  
Сообщение от Qhdocyr email on 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) то, что я использую это пространство имён?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "пространство имён (оператор namespace)"  
Сообщение от anonymous (??) on 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 скомпилировать в программу не забыли?  Там функция объявлена как положено?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру