SOCKET_LISTENはどこで定義されているかです。
'bSOCKET_LISTEN' のエラー箇所以前になんらか問題があるのか
あと、{ }が閉じていない、;がない等だと
それ以降大量のエラーがでることはよくあります。
ヘッダファイルもエラーがあると、ソース側で大量にエラーを吐くこともあります。
'bSOCKET_LISTEN' をヘッダで定義ってことはないですよね
bSOCKET_LISTENは
BOOL bSOCKET_LISTEN = FALSE, bSOCKET_S = FALSE
で一番上の方で宣言してあり、そこから派生で他の所で使用している感じになっていました。
ヘッダで定義はしていなくソースファイルで宣言してありました。
>そこから派生で他の所で使用している感じになっていました
これは他のソースを参照しているということでしょうか?
あと
error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
も気になりますどこかで同じ変数が宣言されていますか?
クリックしたらそのエラー位置へ移動しますよね
返信有難うございます。
他のソースを参照していると言うわけではなく他の場所で作成してある
if (bSOCKET_LISTEN) {//リッスンソケット用選択
if (closesocket(listen_s)) {
MessageBox(hDlg,リッスン・ソケットクローズ失敗,
Error,MB_ICONEXCLAMATION | MB_OK);
}
}
EndDialog(hDlg, IDOK);
return TRUE;
}
や
MessageBox(hDlg, accept error, Error, MB_OK);
closesocket(listen_s);
bSOCKET_LISTEN = FALSE;
return TRUE;
}
}
if (closesocket(listen_s) != 0) {//accept関数が成功したら閉じること
MessageBox(hDlg, Error, Error, MB_OK);
return TRUE;
}
bSOCKET_LISTEN = FALSE;
bSOCKET_S = TRUE;
等です。
今わざとエラーを再現させてみましたが、同様なエラーになるので
やはりどこかで }が一つ多いとかではないでしょうか?
bSOCKET_LISTEN = TRUE;//成功した場合
の前のあたりで括弧の数が合っているか確認してみてください。
Sugi様たびたび有難うございます。
括弧が多いのかと思って色々と見直してて、何も変わってはいないのですがエラーをもう一度確
認しようとしてコンパイルした所4つに減っていました。
最後に書いて頂いた場所
// 接続メッセージ受信のウィンドウプロシージャー
LRESULT CALLBACK WndProc(){
case FD_ACCEPT:
conn_s = accept(listen_s, (SOCKADDR *)&client , &client_addr);
return 0;
}
で
\受信管理画面ズヴァリ\ipmsav.cpp(403) : error C2046: 不正な 'case' です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(404) : error C2065: 'conn_s' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(404) : error C2065: 'client' : 定義されていない識別子です。
C:\Documents and Settings\Administrator\デスクトップ\受信管理画面\ipmsav.cpp
(404) : error C2065: 'client_addr' : 定義されていない識別子です。
となっていました。
error C2501: 'bSOCKET_LISTEN' : 識別名を宣言するのに、型が指定されていませ
ん。
を改めて確認しようと思いまして実行したらエラーが消えてしまっていたので確認できずでし
た。
何もいじってないのですが・・・。
361行の手前が怪しいかと思うのですが
ソースがわからないのでどこが悪いのかまでは予測できないですね(^^;
えーっと(^^;
僕の参考に書いたものをそのままコピペしてますか??
例としてあげたものであって、動くようにコーディングはしてないので
そのまままる写しではエラーになりますが・・・
//error C2046: 不正な 'case' です。(switchがないため)
Sugi様有難うございます。
一応361行から前の部分を提示しておきます。
361行の手前は
//ソケット生成して、呼び出しまでの関数
int mystream(HWND hDlg, u_short uport)
{
SOCKADDR_IN saddr;
int nAsync;
listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
if (bind(listen_s, (SOCKADDR *)&saddr, sizeof(saddr))
== SOCKET_ERROR) ;
listen(listen_s , 1);
WSAAsyncSelect(listen_s, hDlg, MY_MSG, FD_ACCEPT);
return 0;
listen_s = socket(AF_INET, SOCK_STREAM, 0);//リスンソケット
if (listen_s < 0) {
if (WSAGetLastError() != WSAEWOULDBLOCK) {
MessageBox(hDlg,
ソケットオープンエラー,Error,
MB_OK | MB_ICONEXCLAMATION);
return -1;
}
} else {
MessageBox(NULL,ソケットオープンしました,socket成功,MB_OK);
}
bSOCKET_LISTEN = TRUE;//成功した場合←361行目
こんな感じですね
丸写しはしてないです。
Switch文も含めて書いたんですけど同様に出てくるんです。
見る限りでなにか気になるところはないのですが
そのあたりコメントアウトしてエラーが変わったりしますか?
一応先ほどの部分をちょっと変えてみたのですが、
LRESULT CALLBACK WndProc(){
SOCKADDR from;
int fromlen;
int conn_s;
memset(&from, 0, sizeof(SOCKADDR));
fromlen = sizeof(from);
switch(){
case FD_ACCEPT:
conn_s = accept(listen_s, (SOCKADDR *)&from, &fromlen);
return 0;
}
}
と言った具合にエラーなんですけど、WndProcで関数が値を返せない可能性があるといわれまし
た。
値を入れてないからだと思うのですが、何を入れればいいのやら不明で・・・・。
switchの所は上の方から使っているmsgでいけると思ったのですが宣言されていないとの事なの
で宣言しなおしです。
ちなみにエラーは変わらなかったです。
WndProcの値に
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
と入れてswitchで宣言しました。
値が返せないエラーに関してはまったく変わらずです。
もしかしてこの部分の下に
LRESULT CALLBACK WinProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
とあるんですけどこれが邪魔してる感じですか?