'SDL_main':必须返回一个值

时间:2013-03-26 18:38:46

标签: c++ visual-studio sdl

我试图在c ++ usind SDL中检索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();
}

当我把0返回时;最后,它建立了项目,但在此之后立即完成 (我正在使用vs2012)

更新

cout<<"Some message";

没有打印任何内容,我是否可能将导入配置错误?那些额外的依赖是对的吗?

  

SDL.lib; SDL_net.lib; SDLmain.lib

我不知道还有什么可能是错的......

2 个答案:

答案 0 :(得分:5)

这是因为SDL定义了这样一个宏:

#define main SDL_main

因此,您编写的函数实际上称为SDL_main,并且与任何其他不是实际main函数的函数一样,如果它不返回void,则必须给它一个return声明。

答案 1 :(得分: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;

更新3
试试这个,把你的接收部分放在这个if语句中

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

如果这仍然不起作用我建议使用QT套接字或Boost asio,既可以异步也可以更直观