C++头文件中定义继承类构造函数出现语法错误如何解决?
错误产生原因
C++ 语法明确规定:构造函数的成员初始化列表属于构造函数定义的专属组成部分,不允许出现在类内的构造函数声明语句中。你在头文件类定义中写的BindingSocket(...):Socket(...);将初始化列表放在了声明语句末尾,违反了语法规则,因此触发报错。
你在声明末尾添加{}后语法合法的原因是:添加{}后,该行代码不再是构造函数的声明,而是直接完成了构造函数的类内定义,此时初始化列表跟随定义出现符合语法要求,但这种写法相当于你把构造函数的实现直接写在了头文件中,不符合你原本想把实现放到独立cpp文件的规划。
正确处理方案
- 头文件类内仅保留构造函数的参数声明,删除初始化列表:
#ifndef NETWORKING_BINDINGSOCKET_HPP_ #define NETWORKING_BINDINGSOCKET_HPP_ #include <stdio.h> #include "Socket.hpp" namespace HDE { class BindingSocket: public Socket { public: // 声明仅写参数列表即可 BindingSocket(...); }; } #endif
- cpp文件实现构造函数时,再补充父类构造的初始化列表和你自己的构造逻辑:
HDE::BindingSocket::BindingSocket(...): Socket(...) { // 构造函数业务逻辑写在这里 }
内容的提问来源于stack exchange,提问作者CacheMoneyPlaya
相关产品推荐
相关产品推荐

