-1

我的一个 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");
4

1 回答 1

0

您的标头bool listening在定义中class unix_stream_server,但您的.cpp文件有另一个定义,class unix_stream_server其中省略了bool listening成员。不要那样做。说真的,不要那样做。从你的实现文件中包含你的头文件!请!

于 2012-08-16T22:02:06.567 回答