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

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

Восстановить пароль Регистрация
 
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 61
03.01.2015, 21:34     Разбиение проекта CodeBlocks на файлы #1
В общем, такая проблема.
Писал класс строки, вроде все работало, но вот когда начал пытаться разбить проект на файлы, вылез лог с ошибкой:
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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dr.Xank
41 / 41 / 12
Регистрация: 13.10.2012
Сообщений: 368
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
Сообщений: 61
03.01.2015, 23:14  [ТС]     Разбиение проекта CodeBlocks на файлы #3
К сожалению нет(
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
03.01.2015, 23:38     Разбиение проекта CodeBlocks на файлы #4
В проект добавляли новые файлы?
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 61
04.01.2015, 00:00  [ТС]     Разбиение проекта CodeBlocks на файлы #5
В смысле?

Добавлено через 1 минуту
А, понял, я добавлял через "Новый класс"
kazak
 Аватар для kazak
3029 / 2350 / 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
Сообщений: 61
04.01.2015, 00:41  [ТС]     Разбиение проекта CodeBlocks на файлы #7
Вроде все на месте
Миниатюры
Разбиение проекта CodeBlocks на файлы  
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.01.2015, 00:44     Разбиение проекта CodeBlocks на файлы #8
Свойства проекта посмотрите в Build targets.
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 61
04.01.2015, 00:52  [ТС]     Разбиение проекта CodeBlocks на файлы #9
Вот они:
Миниатюры
Разбиение проекта CodeBlocks на файлы  
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.01.2015, 01:09     Разбиение проекта CodeBlocks на файлы #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Не силен в CodeBlocks, попробуйте все файлы в одной папке расположить.
Unsigned
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 61
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 на файлы
Еще ссылки по теме:

Разбиение проекта на файлы C++
C++ Разбиение программы на файлы
Файлы ввода/вывода в среде Codeblocks C++
C++ Builder Разбиение проекта на подпрограммы

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

Или воспользуйтесь поиском по форуму:
volvo
Супер-модератор
 Аватар для volvo
22084 / 14389 / 4047
Регистрация: 22.10.2011
Сообщений: 25,465
Записей в блоге: 2
04.01.2015, 14:10     Разбиение проекта CodeBlocks на файлы #12
Казалось бы, при чем тут Билдер?
Yandex
Объявления
04.01.2015, 14:10     Разбиение проекта CodeBlocks на файлы
Ответ Создать тему
Опции темы

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