конструктор, вызывающий базовый класс с фигурными скобками - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь скомпилировать этот фрагмент кода:

 Server(uint16_t port, NetworkManager nmanager)
: TCPServer(port, nmanager){} : TCPServer(port, nmanager)

, но я не понимаю, почему два конструктора вызывают базовый класс.Может кто-нибудь объяснить, пожалуйста, эту строку кода?Это также дает ошибки времени компиляции, как следует

/build/libs/network/tests/network/tcp_client_sersver_stress_tests.cpp:49:47: error: 
  use of undeclared identifier 'port'
: TCPServer(port, nmanager){} : TCPServer(port, nmanager)
/build/libs/network/tests/network/tcp_client_sersver_stress_tests.cpp:49:53: error: 
  use of undeclared identifier 'nmanager'
: TCPServer(port, nmanager){} : TCPServer(port, nmanager)
/build/libs/network/tests/network/tcp_client_sersver_stress_tests.cpp:49:35: error: 
  C++ requires a type specifier for all declarations
: TCPServer(port, nmanager){} : TCPServer(port, nmanager)
/build/libs/network/tests/network/tcp_client_sersver_stress_tests.cpp:49:47: error: 
  'port_' is a private member of 'network::TCPServer'
: TCPServer(port, nmanager){} : TCPServer(port, nmanager)
/build/libs/network/include/network/tcp/tcp_server.hpp:94:45: note: declared private here uint16_t port_;
/build/libs/network/tests/network/tcp_client_sersver_stress_tests.cpp:49:53: error: 
  'manager_' is a private member of 'network::TCPServer'
: TCPServer(port, nmanager){} : TCPServer(port, nmanager)
/build/libs/network/include/network/tcp/tcp_server.hpp:99:45: note: declared private here std::shared_ptr<ClientManager> manager_;

, любая помощь будет оценена.Спасибо.

1 Ответ

0 голосов
/ 27 ноября 2018

Этот код не может быть скомпилирован, потому что он не является допустимым C ++.При определении конструктора может быть одна последовательность инициализаторов членов (включая вызовы конструктора базового класса).Фрагмент с большей вероятностью будет правильным, если вы измените его на

 Server(uint16_t port, NetworkManager nmanager)
    : TCPServer(port, nmanager)
 // ^ From here, initialize base class and data members ONCE, separated by ","
 //   No additional ":" is allowed
 {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...