Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
#1

Разбиение проекта CodeBlocks на файлы - C++

03.01.2015, 21:34. Просмотров 758. Ответов 11
Метки нет (Все метки)

В общем, такая проблема.
Писал класс строки, вроде все работало, но вот когда начал пытаться разбить проект на файлы, вылез лог с ошибкой:
D:\Code_Blocks\CodeBlocks\Programms\Try_1\main.cpp|10|undefined reference to `operator<<(std::ostream&, sample_string)'|

В проекте есть след. файлы: "sample_string.h"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define ENTRY_VALUE 10000
#include <iostream>
#include <cstring>
using namespace std;
 
class sample_string{
    char *pointer_to_string;
public:
    explicit sample_string(){ pointer_to_string = new char [2]; }
    explicit sample_string(size_t num){ pointer_to_string = new char [num]; }
    sample_string(const sample_string&);
    ~sample_string(){ delete [] pointer_to_string; }
    sample_string operator+(sample_string);
    sample_string operator=(sample_string);
    sample_string operator=(char*);
    friend ostream &operator<<(ostream&, sample_string);
    friend istream &operator>>(istream&, sample_string&);
    void memory_allocate(size_t);
};
"main.cpp":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <sample_string.h>
using namespace std;
 
int main()
{
    sample_string str;
 
    cin >> str;
    cout << str;
 
    return 0;
}
"sample_string.cpp":

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "sample_string.h"
 
sample_string sample_string::operator+(sample_string object)
{
    size_t count(0x0);
 
    count = strlen(this->pointer_to_string) + strlen(object.pointer_to_string);
    count++;
 
    sample_string end_obj(count);
 
    strcpy(end_obj.pointer_to_string, strcat(this->pointer_to_string, object.pointer_to_string));
 
    return end_obj;
}
 
sample_string sample_string::operator=(char *str)
{
    size_t count(0x0);
 
    count = strlen(str);
    count++;
 
    this->memory_allocate(count);
 
    strcpy(this->pointer_to_string, str);
 
    return *this;
}
 
sample_string sample_string::operator=(sample_string object)
{
    size_t count(0x0);
    count = strlen(object.pointer_to_string);
    count++;
 
    this->memory_allocate(count);
 
    strcpy(this->pointer_to_string, object.pointer_to_string);
 
    return *this;
}
 
inline ostream &operator<<(ostream &stream, sample_string object)
{
    stream << object.pointer_to_string;
    return stream;
}
 
istream &operator>>(istream &stream, sample_string &object)
{
    object.memory_allocate(ENTRY_VALUE);
    stream >> object.pointer_to_string;
    return stream;
}
 
inline sample_string::sample_string(const sample_string &obj)
{
    pointer_to_string = new char [strlen(obj.pointer_to_string)];
    strcpy(pointer_to_string, obj.pointer_to_string);
}
 
inline void sample_string::memory_allocate(size_t num)
{
    delete [] pointer_to_string;
    pointer_to_string = new char [num];
}
А вот так выглядел код до того, как я его разбил: (это рабочий код)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <cstring>
#define ENTRY_VALUE 10000
using namespace std;
 
class sample_string{
    char *pointer_to_string;
public:
    explicit sample_string(){ pointer_to_string = new char [2]; }
    explicit sample_string(size_t num){ pointer_to_string = new char [num]; }
    sample_string(const sample_string&);
    ~sample_string(){ delete [] pointer_to_string; }
    sample_string operator+(sample_string);
    sample_string operator=(sample_string);
    sample_string operator=(char*);
    friend ostream &operator<<(ostream&, sample_string);
    friend istream &operator>>(istream&, sample_string&);
    void memory_allocate(size_t);
};
 
sample_string sample_string::operator+(sample_string object)
{
    size_t count(0x0);
 
    count = strlen(this->pointer_to_string) + strlen(object.pointer_to_string);
    count++;
 
    sample_string end_obj(count);
 
    strcpy(end_obj.pointer_to_string, strcat(this->pointer_to_string, object.pointer_to_string));
 
    return end_obj;
}
 
sample_string sample_string::operator=(char *str)
{
    size_t count(0x0);
 
    count = strlen(str);
    count++;
 
    this->memory_allocate(count);
 
    strcpy(this->pointer_to_string, str);
 
    return *this;
}
 
sample_string sample_string::operator=(sample_string object)
{
    size_t count(0x0);
    count = strlen(object.pointer_to_string);
    count++;
 
    this->memory_allocate(count);
 
    strcpy(this->pointer_to_string, object.pointer_to_string);
 
    return *this;
}
 
inline ostream &operator<<(ostream &stream, sample_string object)
{
    stream << object.pointer_to_string;
    return stream;
}
 
istream &operator>>(istream &stream, sample_string &object)
{
    object.memory_allocate(ENTRY_VALUE);
    stream >> object.pointer_to_string;
    return stream;
}
 
inline sample_string::sample_string(const sample_string &obj)
{
    pointer_to_string = new char [strlen(obj.pointer_to_string)];
    strcpy(pointer_to_string, obj.pointer_to_string);
}
 
inline void sample_string::memory_allocate(size_t num)
{
    delete [] pointer_to_string;
    pointer_to_string = new char [num];
}
 
int main()
{
    sample_string x;
 
    cin >> x;
    cout << x;
 
    return 0;
}
Может кто сказать, как убрать эту ошибку или как перераскидать код?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2015, 21:34     Разбиение проекта CodeBlocks на файлы
Посмотрите здесь:

Разбиение проекта на файлы - C++
Добрый вечер. Пишу проект на винапи, в нем есть несколько классов с обьявлением и определением. Хотелось бы вынести код каждого класса в...

Разбиение проекта на файлы - C++
Не знаю почему не получается разбить проект на файлы. Пишет всё время fatal error LNK1169: one or more multiply defined symbols found ...

Разбиение проекта на файлы С++ - C++
Есть проект, нужно разбить на несколько файлов. Я то разбил, но есть ошибки непонятного содержания. Ошибка типа:...

Разбиение проекта на файлы - C++
Имеется проект, в котором несколько классов, путем проб и ошибок я разделил несколько классов по файлам, но вот что получается, для них...

Разбиение проекта на файлы - C++
Нужно разбить проект на файлы main.cpp, struct.cpp(здесь функции), struct.h(библиотеки, структура, прототипы функций). Сам пробовал -...

Ошибка генерации CodeBlocks проекта CMake`ом - C++
Пожалуйста, подскажите как правильно сгенерировать CodeBlocks проект с CMake`ом. Опишу по шагам что я делал. 1) В одной папке создал...

Ошибка при сборке проекта MS Visual Studio в CodeBlocks - Кроссплатформенная разработка
Здравствуйте! В общем решил запрограммировать скриптовый мод для GTA IV. Для этого скачал SDK пакет. SDK является проектом MS Visual...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dr.Xank
41 / 41 / 12
Регистрация: 13.10.2012
Сообщений: 369
03.01.2015, 23:02     Разбиение проекта CodeBlocks на файлы #2
C++
1
2
3
friend ostream &operator<<(ostream&, sample_string);
//переправьте на 
friend ostream &operator<<(ostream&, sample_string&);
Может в этом дело.
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
03.01.2015, 23:14  [ТС]     Разбиение проекта CodeBlocks на файлы #3
К сожалению нет(
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
03.01.2015, 23:38     Разбиение проекта CodeBlocks на файлы #4
В проект добавляли новые файлы?
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
04.01.2015, 00:00  [ТС]     Разбиение проекта CodeBlocks на файлы #5
В смысле?

Добавлено через 1 минуту
А, понял, я добавлял через "Новый класс"
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.01.2015, 00:26     Разбиение проекта CodeBlocks на файлы #6
Скорей всего новые файлы не прописались в свойствах проекта. Посмотрите, чтобы эти файлы присутствовали в дереве проекта окно Managment\Projects, и посмотрите меню Project->Properties вкладка Build targets в окошке Build target files также должны присутствовать все файлы срр проекта.
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
04.01.2015, 00:41  [ТС]     Разбиение проекта CodeBlocks на файлы #7
Вроде все на месте
Миниатюры
Разбиение проекта CodeBlocks на файлы  
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.01.2015, 00:44     Разбиение проекта CodeBlocks на файлы #8
Свойства проекта посмотрите в Build targets.
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
04.01.2015, 00:52  [ТС]     Разбиение проекта CodeBlocks на файлы #9
Вот они:
Миниатюры
Разбиение проекта CodeBlocks на файлы  
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.01.2015, 01:09     Разбиение проекта CodeBlocks на файлы #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Не силен в CodeBlocks, попробуйте все файлы в одной папке расположить.
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
04.01.2015, 01:55  [ТС]     Разбиение проекта CodeBlocks на файлы #11
Хорошо, спасибо вам)

Добавлено через 34 минуты
Проблема была в том, что я сделал функцию operator<< inline, поэтому ошибка!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2015, 14:10     Разбиение проекта CodeBlocks на файлы
Еще ссылки по теме:

Разбиение проекта на .h - C++
Эсть класс А от его наследую класс Б, в .h пишу #ifndef B_H #define B_H #include &quot;A.h&quot; class B:public A{ ......} #endif ...

Разбиение проекта на подпрограммы - C++ Builder
Есть достаточно объемный проект. Я хочу вынести определенные участки кода(например, функцию генерации базы правил) в отдельные .cpp файлы....

Разбиение однофайлового проекта на многофаовый (функции). C++ - C++
Есть код программы, которая позволяет ввести динамический массив, а затем 1. Упорядочивает элементы массива по возрастанию. 2. Находит...

Файлы ввода/вывода в среде Codeblocks - C++
Занимаюсь олимпиадным программированием (писал на паскале , собираюсь переходить на c++) Поставил CodeBlocks Проблема: ...

Разбиение программы на файлы С++ - C++
Здравствуйте! У меня не получается линейный алгоритм своей программы разбить на два файла именно следующим образом. В первом будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
22827 / 14969 / 4304
Регистрация: 22.10.2011
Сообщений: 26,535
Записей в блоге: 4
04.01.2015, 14:10     Разбиение проекта CodeBlocks на файлы #12
Казалось бы, при чем тут Билдер?
Yandex
Объявления
04.01.2015, 14:10     Разбиение проекта CodeBlocks на файлы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru