Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2012, 20:32   #1
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию C::B подключить библиотеку

Привет, мир!

Пишу прогу в Code::Blocks 10.05.
В папке проекта создал две папки "src" и "lib".
Файл main.cpp положил в "src".
Создал класс CA содержащий только конструктор и положил
файлы "A.h" и "A.cpp" в папку "lib".

Файл A.h
Код:
#ifndef A_H
#define A_H


class CA
{
    public:
        CA();
    protected:
    private:
};
#endif // A_H
Файл A.cpp
Код:
#include "A.h"

CA::CA()
{
    //ctor
}
Но добавлять в проект файлы не стал (ну вот есть необходимость).
Указал в "Progect->Build option->Search directories->Compiler"
путь к папке проекта, а в "main.cpp"
#include "lib/A.h"
Также указал в "Progect->Build option->Search directories->Linker"
путь к папке "lib", ну что бы тот самый линкер и нашел реализацию класса "AC".

Получил ошибку: "...undefined reference to `CA::CA()".
Вопрос собственно - ПОЧЕМУ?
Буду очень Вам благодарен, Алексей.
KemanSR вне форума Ответить с цитированием
Старый 05.02.2012, 20:42   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от KemanSR Посмотреть сообщение
Получил ошибку: "...undefined reference to `CA::CA()".
Вопрос собственно - ПОЧЕМУ?
cpp файл не был добавлен в проект. Не был откомпилирован. Линкер о нем ничего не знает.
_Bers вне форума Ответить с цитированием
Старый 05.02.2012, 20:45   #3
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
cpp файл не был добавлен в проект. Не был откомпилирован. Линкер о нем ничего не знает.
Да это понятно вот только существует необходимость НЕ ДОБАВЛЯТЬ ФАЙЛ в проект.
Цитата:
Сообщение от KemanSR Посмотреть сообщение
Также указал в "Progect->Build option->Search directories->Linker"
путь к папке "lib", ну что бы тот самый линкер и нашел реализацию класса "AC".
KemanSR вне форума Ответить с цитированием
Старый 05.02.2012, 20:53   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от KemanSR Посмотреть сообщение
Да это понятно вот только существует необходимость НЕ ДОБАВЛЯТЬ ФАЙЛ в проект.
Откомпилируй cpp в LIB, и добавляй в проект LIB
_Bers вне форума Ответить с цитированием
Старый 05.02.2012, 20:58   #5
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Откомпилируй cpp в LIB, и добавляй в проект LIB
А использовать библиотеку в формате .cpp нет возможности? Конечно я незнаю как, но интуитивно я попытался: "Progect->Build option->Search directories->Linker". Или что я указал в этой опции?
KemanSR вне форума Ответить с цитированием
Старый 05.02.2012, 21:00   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от KemanSR Посмотреть сообщение
А использовать библиотеку в формате .cpp нет возможности?
Конечно есть: берёшь, и подключаешь ручками по человечески
_Bers вне форума Ответить с цитированием
Старый 05.02.2012, 21:21   #7
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Код:
#include <avr/io.h>

#define SOME 1
#include "lib/A.h"

int main(void)
{

    // Insert code
    CA a;
    while(1)
    ;

    return 0;
}
Код:
#ifndef A_H
#define A_H

#ifndef SOME
#error "SOME is not defined"
#endif

class CA
{
    public:
        CA();
    protected:
    private:
};

#endif // A_H
#include "A.h"

Код:
CA::CA()
{
    //ctor
}
Эта странная "необходимость" вызвана тем что при добавлении файлов в проект выдает ошибку "#error "SOME is not defined"", думаю что компилятор сначала обрабатывает "A.h", а потом уж и "main.cpp". А мне нужно наоборот.

Цитата:
Сообщение от KemanSR Посмотреть сообщение
А использовать библиотеку в формате .cpp нет возможности? Конечно я незнаю как, но интуитивно я попытался: "Progect->Build option->Search directories->Linker". Или что я указал в этой опции?
Ну пожалуйста ответе!!!

Последний раз редактировалось KemanSR; 05.02.2012 в 21:23.
KemanSR вне форума Ответить с цитированием
Старый 05.02.2012, 21:52   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

SOME должно ыть обьявленно в каждой единице компиляции(каждом cpp)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.02.2012, 22:04   #9
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
SOME должно ыть обьявленно в каждой единице компиляции(каждом cpp)
Это единственный вариант? Меня это не устраивает. Но ведь если верить учебнику
Код:
#include "lib/A.h"
заменится содержимым данного файла. Соответственно сначала должно быть
Код:
#define SOME
, а уже потом
Код:
#ifndef SOME
?
Кстати в "main.cpp" он есть, добавил и в "A.cpp" все равно срабатывает #error.

Последний раз редактировалось KemanSR; 05.02.2012 в 22:07.
KemanSR вне форума Ответить с цитированием
Старый 05.02.2012, 22:36   #10
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

1 Вариант:

Код:
//файл GlobDefine.h
#define SOME 1
Код:
//файл main.cpp
#include "GlobDefine.h"
#include <avr/io.h>
#include "lib/A.h"

int main(void) { ... }
Код:
//файл A.cpp
#include "GlobDefine.h"
#include "A.h"
CA::CA() { /*ctor*/ }
2 Вариант:

Все как обычно, только файл:


Код:
//файл A.cpp
#define SOME 1
#include "A.h"
CA::CA() { /*ctor*/ }
Файлы спп добавляются в проект обычным образом
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Немогу подключить библиотеку L6go1as Общие вопросы C/C++ 3 07.01.2012 23:33
Как подключить библиотеку graphics.h в Code::Blocks? Sinoptik37 Общие вопросы C/C++ 0 05.06.2011 14:19
Как подключить .NET библиотеку к Silverlight? Mindzor WPF, UWP, WinRT, XAML 0 05.03.2011 21:45
Как подключить библиотеку. Dasharnb777 Общие вопросы .NET 4 30.09.2010 12:14
Не могу подключить библиотеку php_gb2 Ysman PHP 3 10.09.2010 19:42