0

SDL を使用して C++ で websice のコンテンツを取得しようとしていますが、次のエラーが表示されます。

'SDL_main' : 値を返す必要があります

私のコードは次のとおりです。

#include <iostream>
#include "SDL.h"
#include "SDL_net.h"
#include <cstring>

int main(int argc,char** argv)
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDLNet_Init();

    IPaddress ip;
    SDLNet_ResolveHost(&ip,"www.linux.org",80);

    const char* http="GET / HTTP/1.1\nHost: www.linux.org\n\n";

    TCPsocket client=SDLNet_TCP_Open(&ip);

    SDLNet_TCP_Send(client,http,strlen(http)+1);

    char text[10000];

    while(SDLNet_TCP_Recv(client,text,10000))
        std::cout << text;

    SDLNet_TCP_Close(client);

    SDLNet_Quit();
    SDL_Quit();
}

return 0; を入れると; 最後に、プロジェクトをビルドしましたが、その直後に終了しました(vs2012を使用しています)

アップデート

cout<<"Some message";

インポートを間違って設定した可能性はありますか? それらの追加の依存関係は正しいですか?

SDL.lib;SDL_net.lib;SDLmain.lib

他に何が間違っているのかわかりません...

4

2 に答える 2

6

これは、SDL が次のようなマクロを定義しているためです。

#define main SDL_main

したがって、作成した関数は実際に呼び出されSDL_main、実際の関数ではない他の関数と同様に、main返されない場合はステートメントvoidを指定する必要があります。return

于 2013-03-26T18:42:13.303 に答える
0

コードは永遠にループしないため、最初のパスの後に 0 を返すだけなので、次のようなループを作成する必要があります。

while(1){
sdl_events event;    

switch(event){
//handle events, drawings and so on
...
...
...
case SDL_QUIT:
 exit (0);
 break;
}

}

http://sdl.beuc.net/sdl.wiki/OpenGL_Full_Example

更新
ホストへの接続に問題がある可能性があるため、次のように接続が成功するかどうかを確認できます。

#define MAXLEN 1024
int result;
char msg[MAXLEN];

result = SDLNet_TCP_Recv(sock,msg,MAXLEN-1);
if(result <= 0) {
    // TCP Connection is broken. (because of error or closure)
    SDLNet_TCP_Close(sock);
    exit(1);
}
else {
    msg[result] = 0;
    printf("Received: \"%s\"\n",msg);
}

更新 2
これを変更します。

while(SDLNet_TCP_Recv(client,text,10000))
        std::cout << text;  

これに:

while(SDLNet_TCP_Recv(client,text,9999))
        std::cout << text;

UPDATE 3
これを試して、このifステートメントに受信部分を入れてください

if(SDLNet_SocketReady(client) == 1)
{
  while(SDLNet_TCP_Recv(client,text,9999))
       std::cout << text;
}

それでもうまくいかない場合は、非同期でより直感的な QT ソケットまたは Boost asio を使用することをお勧めします。

于 2013-03-26T19:02:31.067 に答える