基类构造函数和数据成员初始化的奇怪行为
Strange behaviour with base class constructor and data member initialization
我的一个C++程序遇到了一个非常大而奇怪的问题(这是源代码:https://github.com/dermesser/libsocket)。
首先,围绕它的一些细节:有一个基类(socket,在C++/socket.cpp中),一个(虚拟)派生类(unix_socket,在C++/unixbase.cpp中)和一个"叶"类(unix_stream_server)。数据成员"sfd"在"socket"(socket.cpp)中声明和初始化。但是在unix_stream_server::setup(C++/unixserverstream.cpp)中,"sfd"有一个完全不同的值。一点调试输出:
socket constr -1 # <--- "socket" constructor
unix_socket constr - sfd: 1447345536 # <---- unix_socket constructor
setup final: 1447345536 # <--- unix_stream_server::setup
unixserverstream.cpp:76: unix_stream_server::setup: Socket already set up!
最后一行是异常传递的错误消息。调试程序会给出相同的结果。
奇怪的是变量的值变化很大,我不知道为什么。在具有类似继承路径的同级类中,不存在此问题。
编辑1:如果我重新分配"sfd",问题甚至不会消失。它只是保持相同的奇怪值。
我消除的一些问题和我尝试过的事情:
- 定义/声明不匹配(我知道,这在这个软件中很奇怪)
- 将"sfd"放在公共区域
同样重要的是:如果我静态或动态地链接程序(它是examples++/unix_server_stream.cpp)(针对Makefile生成的SO),则存在问题。
我很绝望:(有没有人对这些问题有想法或经验?还是我太累了,找不到解决方案?
编辑 2:发布代码很困难。我认为如果您按照我的提示对 github 存储库上的文件进行操作会更好,因为我不知道要发布哪一部分。不好意思。。。(请不要以为我希望你为我工作 - 选择正确的代码只是很困难)
unix_stream_server::setup():
if ( sfd != -1 )
throw socket_exception(__FILE__,__LINE__,"unix_stream_server::setup: Socket already set up!n");
if ( path == NULL )
throw socket_exception(__FILE__,__LINE__,"unix_stream_server::setup: Path is NULL!n");
sfd = create_unix_server_socket(path,STREAM,flags);
_path.assign(path);
if ( sfd < 0 )
throw socket_exception(__FILE__,__LINE__,"unix_stream_server::setup: Error at creating UNIX stream server socket!n");
你的标头在 class unix_stream_server
的定义中bool listening
,但你的 .cpp
文件有另一个省略bool listening
成员的class unix_stream_server
定义。 别这样。 说真的,不要那样做。 包含实现文件中的标头! 请!
- 为什么std::vector和std::valarray初始化构造函数不同
- 初始化构造函数C++中结构的向量
- C++ 中常量属性的初始化构造函数错误
- 不正确的输出和变量未用Eclipse CDT初始化构造函数
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- 如何通过参数初始化构造函数中的数组?
- 是否有理由使用 malloc 初始化构造函数中的指针
- 如何在 c++ 中初始化构造函数中的二维数组
- 为什么初始化构造函数列表参数时会发生异常?
- 无法初始化构造函数
- 初始化构造函数的默认参数的优选方法是什么?
- 在C++17中使用空列表初始化构造函数时发生编译错误
- C++ 初始化构造函数初始化列表中的嵌套结构?
- 初始化构造函数c++中的向量
- g++ (GCC) 4.6.0 我有以下类,我正在尝试初始化构造函数的结构成员初始化列表
- 使用字符串文本初始化构造函数中的 std::array<char,x> 成员。海湾合作委员会错误?
- 初始化构造函数C++中函数的成员指针
- 在c++中初始化构造函数中的静态成员变量时出错
- memset()初始化构造函数中的对象
- 初始化构造函数C++中的成员向量