295 / 124 / 106
Регистрация: 30.10.2015
Сообщений: 690
1

Не работает конструктор без параметров

06.06.2017, 23:18. Показов 2108. Ответов 6
Метки нет (Все метки)

1) Не работает конструктор без параметров.
2) Как должен выглядеть деструктор для классов Server и Client?
3) Как правильно вынести реализацию конструкторов классов потомков в .cpp?

socket.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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifndef __SOCKET_H__
#define __SOCKET_H__
 
#include <iostream>
#include <cstdint>
 
#include <netinet/in.h>
#include <string.h>
#include <netdb.h>
 
class Socket
{
protected:
    sockaddr_in information;
    int socketFD;
    std::string buffer;
 
    static const unsigned short DefaultPort = 8080;
    static const unsigned int MaxLengthMessage = 256;
    static socklen_t GetSizeSockaddr();
    static int SetDefaultSocketFD();
    static void ShowInformation(const sockaddr_in &info);
    static void Error(const std::string error);
    static void Error(const std::string error, unsigned int code);
public:
    Socket();
    Socket(const unsigned short family, const unsigned short port);
    Socket(const unsigned short family, const unsigned short port, const std::string &addr);
    ~Socket();
 
    void Send(const std::string &message);
    std::string Receive();
};
 
class Server : public Socket
{
public:
    Server() : Socket() {}
    Server(const unsigned short family, const unsigned short port) : Socket(family, port) {}
    Server(const unsigned short family, const unsigned short port, const std::string &addr) : Socket(family, port, addr) {}
};
 
class Client : public Socket
{
public:
    Client() : Socket() {}
    Client(const unsigned short family, const unsigned short port) : Socket(family, port) {}
    Client(const unsigned short family, const unsigned short port, const std::string &addr) : Socket(family, port, addr) {}
};
 
#endif // __SOCKET_H__


socket.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
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 "socket.h"
 
#include <iostream>
#include <cstdint>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
 
Socket::Socket()
{
    std::cout << "1 constructor." << std::endl;
 
    memset(&information, 0, GetSizeSockaddr());
 
    information.sin_family = AF_INET;
    information.sin_port = htons(DefaultPort);
    information.sin_addr.s_addr = inet_network("localhost");
 
    socketFD = SetDefaultSocketFD();
    ShowInformation(information);
}
 
Socket::Socket(const unsigned short family, const unsigned short port)
{
    std::cout << "2 constructor." << std::endl;
 
    memset(&information, 0, GetSizeSockaddr());
 
    information.sin_family = family;
    information.sin_port = htons(port);
    information.sin_addr.s_addr = inet_network("localhost");
 
    socketFD = SetDefaultSocketFD();
    ShowInformation(information);
}
 
Socket::Socket(const unsigned short family, const unsigned short port, const std::string &addr)
{
    std::cout << "3 constructor." << std::endl;
 
    memset(&information, 0, GetSizeSockaddr());
    const char *a = addr.c_str();
 
    information.sin_family = family;
    information.sin_port = htons(port);
    information.sin_addr.s_addr = inet_network(a);    
 
    socketFD = SetDefaultSocketFD();
    ShowInformation(information);
}
 
socklen_t Socket::GetSizeSockaddr()
{
    return sizeof(sockaddr);
}
 
int Socket::SetDefaultSocketFD()
{
    return socket(AF_INET, SOCK_STREAM, 0);
}
 
void Socket::ShowInformation(const sockaddr_in &info)
{
    std::cout << "Port: " << info.sin_port << std::endl;
    std::cout << "Adress: " << info.sin_addr.s_addr << std::endl;
}
 
void Socket::Send(const std::string &message)
{
}
 
std::string Receive()
{
}
 
void Socket::Error(const std::string error)
{
    std::cout << error << std::endl;
    exit(EXIT_FAILURE);
}
 
void Socket::Error(const std::string error, unsigned int code)
{
    std::cout << error << ": " << code << std::endl;
    exit(EXIT_FAILURE);
}
 
std::string Socket::Receive()
{
}
 
Socket::~Socket()
{ 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2017, 23:18
Ответы с готовыми решениями:

Конструктор без параметров
class stack { private: int top; // вершина стека int s; // массив в котором хранится стек...

Как вызвать конструктор с параметрами в конструкторе без параметров?
Как вызвать конструктор с параметрами в конструкторе без параметров? То есть что бы конструктор с...

Конструктор без параметров: не выводится строка в приведенном коде
#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &lt;iostream&gt; using namespace::std; class String...

Контруктор шаблонного класса: почему в заданном коде необходим конструктор без параметров?
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;dcl.hpp&gt; #include &lt;string&gt; using namespace...

6
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
06.06.2017, 23:40 2
Что значит не работает? Где используешь?
1
279 / 251 / 209
Регистрация: 14.11.2016
Сообщений: 948
06.06.2017, 23:44 3
Цитата Сообщение от Nemovok Посмотреть сообщение
Как должен выглядеть деструктор для классов Server и Client?
Пустым, если нет работы с динамическими объектами/статического счетчика при создании или удалении объектов (когда при удалении объекта нужно что-то от чего-то отнять) и т.п.
Цитата Сообщение от Nemovok Посмотреть сообщение
Как правильно вынести реализацию конструкторов классов потомков в .cpp?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*  *.h   */
class Server : public Socket
{
public:
    Server(void);
    Server(const unsigned short, const unsigned short);
    Server(const unsigned short, const unsigned short, const std::string&);
    ~Server(void);
};
/*   *.cpp   */
Server::Server(void) : Socket() {}; // у меня VS ругается если в конструкторах/деструкторах ; не ставлю... не знаю как у тебя
Server::Server(const unsigned short family, const unsigned short port) : Socket(family, port) {};
Server::Server(const unsigned short family, const unsigned short port, const std::string &addr) : Socket(family, port, addr) {};
Server::~Server(void) {};
1
295 / 124 / 106
Регистрация: 30.10.2015
Сообщений: 690
06.06.2017, 23:44  [ТС] 4
Цитата Сообщение от nmcf Посмотреть сообщение
Что значит не работает? Где используешь?
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
#include "socket.h"
 
int main()
{
    Server server1();
}
Ничего не выводит. Даже пустой строки.
C++
1
std::cout << "1 constructor." << std::endl;
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
06.06.2017, 23:52 5
Цитата Сообщение от Nemovok Посмотреть сообщение
C++
1
Server server1();
C++
1
Server server1;
1
2548 / 1207 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
06.06.2017, 23:52 6
Лучший ответ Сообщение было отмечено Nemovok как решение

Решение

Nemovok,
потому что вы объявляете внутри main() функцию с именем server1 возвращающую тип Server
1
295 / 124 / 106
Регистрация: 30.10.2015
Сообщений: 690
07.06.2017, 00:08  [ТС] 7
Спасибо огромное всем.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2017, 00:08
Помогаю со студенческими работами здесь

Как работает cin.ignore(), именно в том случае, когда он написан без параметров?
Объясните, пожалуйста, как работает cin.ignore(), именно в том случае, когда написан без параметров...

Конструктор с переменным числом параметров
Привет Всем! интересует вопрос возможно ли описать Конструктор с переменным числом параметров? То...

Конструктор с одним параметром и с переменным числом параметров
пишу обычный класс, обычная лаба, где несколько конструкторов.применять одновременно в условии не...

Передача параметров в конструктор при создании динамического массива
Добрый день! Есть довольно тривиальный класс: class Array1d{ int* ptr_; public: ...


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

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

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