0 / 0 / 2
Регистрация: 17.12.2013
Сообщений: 11
1

Отделение интерфейса от реализации

15.03.2014, 18:17. Показов 1164. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача была разделить интерфейс от реализации. линковщик g++ ругается на неопределение функций в классе, что происходит понять я не могу - возможно не включен func1.cpp в компиляции

g++ client.cpp -o client
/tmp/ccuzgDOv.o: In function `main':
client.cpp: (.text+0x168): undefined reference to `Client::Client(std::vector<char, std::allocator<char> >)'
client.cpp: (.text+0x184): undefined reference to `Client::create_socket()'
client.cpp: (.text+0x1bc): undefined reference to `Client::send_message(std::vector<char, std::allocator<char> >, int)'
client.cpp: (.text+0x275): undefined reference to `Client::send_message(char*, int)'
client.cpp: (.text+0x30a): undefined reference to `Client::send_message(std::vector<char, std::allocator<char> >, int)'
client.cpp: (.text+0x33a): undefined reference to `Client::recv_message()'
client.cpp: (.text+0x428): undefined reference to `Client::~Client()'
collect2: ld returned 1 exit status
make: *** [client.o] Error 1

client.h
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
#ifndef CLIENT_H
#define CLIENT_H
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <iostream>
#include <vector>
#include <fcntl.h>
#include <algorithm>
#include <set>
#define SIZE 50
 
class Client{
public:
        std::vector<char> name;
    int sock;
    struct sockaddr_un address;
    void show_vector(std::vector<char>);
    Client(std::vector<char>);
    ~Client();
    int create_socket();    
    int send_message(char*, int);
    int send_message(std::vector<char>, int);
    char* recv_message();   
    int close_socket(); 
};
#endif
func1.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
#include "client.h"
 
void Client::show_vector(std::vector<char>&a)
    {
        ....
    }
Client::Client(std::vector<char> &name){
        ....
    }
Client::~Client(){
        ...
    }
int Client::create_socket(){
            ....
    }
int Client::send_message(char *message, int size){
        .....
    }
int Client::send_message(std::vector<char> &message, int size){
        ....
    }
char* Client::recv_message(){   
        .....
    }
int Client::close_socket(){
        ....
    }
client.cpp
C++
1
2
3
4
#include "client.h"
#define SIZE 50
using namespace std;
 int main(){....}
Makefile
C++
1
2
3
4
5
6
7
client: client.o func1.o
client.o: client.cpp client.h
    g++ client.cpp -o client
func1.o: func.cpp client.h
    g++ func1.cpp -o func1
clean :
    rm -rf *.o
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2014, 18:17
Ответы с готовыми решениями:

Отделение интерфейса от реализации класса: компиляция кода реализации
Доброго времени суток, У меня возникла проблема с отделением интерфейса от реализации класса....

Отделение интерфейса от реализации
Сделала рабочую программу. Нужно разделить интерфейс от реализации. Делаю как написано: добавить в...

Отделение интерфейса от реализации
Доброго времени суток! Имеется вопрос по теме, обозначенной в заголовке. Предположим, я...

Класс, отделение интерфейса от реализации
Всем привет. Пытаюсь разделить интерфейс от реализации. вот исходный код: файл GradeBook.h ...

1
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
16.03.2014, 05:54 2
Цитата Сообщение от JJJJ Посмотреть сообщение
g++ client.cpp -o client
g++ -c client.cpp
Цитата Сообщение от JJJJ Посмотреть сообщение
g++ func1.cpp -o func1
g++ -c func1.cpp

Обычно файлы класса называются по его имени - Client.h, Client.cpp. Точка входа - main.cpp. Я к тому, что убрать этот непонятный func1.cpp.

Цитата Сообщение от JJJJ Посмотреть сообщение
int send_message(std::vector<char>, int);
Цитата Сообщение от JJJJ Посмотреть сообщение
int Client::send_message(std::vector<char> &message, int size){
В первом случае вектор передается по значению, во втором - по ссылке.

Место вектора char используйте std::string и передавайте по константной ссылке. Аналогично в конструкторе и show_vector.
В объявлении функции пишите имена параметров - по списку типов не ясно что она принимает.
0
16.03.2014, 05:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2014, 05:54
Помогаю со студенческими работами здесь

Отделение интерфейса класса от реализации
Осваиваю раздел одной книги &quot;Отделение интерфейса класса от реализации&quot;. То что получилось можно и...

Отделение интерфейса класса от его реализации
Всем привет! Прочитал все найденные похоже темы, но ответа на свой вопрос я не нашел. Поэтому...

Отделение интерфейса __forceinline функции от реализации
Сабж. Как смочь? Вопрос актуален как для просто функций, так и для функций - членов классов. ...

Отделение интерфейса класса от реализации (Ошибка при компиляции)
Не могу решить проблему... При попытке скомпилировать исходник из дейтелловской книги получаю...

Разделение интерфейса и реализации
Добрый день. Пытаюсь разделить проект, создал второй cpp и h файлы. Переменные объявлял в .h, были...

Какие механизмы обеспечивают разделение интерфейса и реализации?
Добрый день! Не подскажите какие механизмы обеспечивают разделение интерфейса и реализации? Чем...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru