我的一個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");
郵政編碼,而不是詞:-) – 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