基类构造函数和数据成员初始化的奇怪行为
我的一个C++程序(这里是源代码:https://github.com/dermesser/libsocket)有一个非常大的和奇怪的问题。有一个基类(C++/socket.cpp中的套接字),一个(虚拟)派生类(unix_socket,C++/unixbase.cpp中)和一个“叶”类( unix_stream_server)。数据成员“sfd”在“套接字”(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”公众区域
还有什么可能的问题:如果我通过静态或动态链接程序(它是示例++/unix_server_stream.cpp)(针对Makefile生成的SO)存在问题。
,我渴望:(有没有人有这样的问题,想法或经验,还是我太累了,找到解决方案
编辑2:?这很难张贴代码,我认为这是更好,如果你遵循。我提示github存储库中的文件,因为我不知道应该发布哪一部分。:|对不起......(请不要以为我希望你为我工作 - 只是很难选择正确的代码)
unix_stream_server ::设置():
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
文件有另一个class unix_stream_server
的定义,它省略了bool listening
成员。不要这样做。严重的是,不要这样做。从你的实现文件中包含你的头文件!请!
邮政编码,而不是词:-) – 2012-08-16 20:06:04
我会说'sfd'未初始化,基于值。 – 2012-08-16 20:24:03
如果你明确地调用子类构造函数中的父类构造函数(例如'unix_socket :: unix_socket(void):socket :: socket(),_path(“”){}''和'unix_stream_server'类似)帮帮我? – 2012-08-16 20:28:45