2013-03-26 201 views
0

我想中检索在C websice的内容的价值++ usind SDL,但它给我这个错误:'SDL_main':必须返回

'SDL_main' : must return a value

我的代码是:

#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

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

回答

4

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

#define main SDL_main 

所以你写的函数实际上是调用SDL_main像任何其他功能是不实际的main功能,如果它不返回void,你必须给它一个return声明。

+0

但为什么它结束后马上建造它,当我把在最后返回0? – 2013-03-26 18:46:26

+0

@feribaco:因为你正在返回一个int ... – 2013-03-26 18:47:11

+0

对不起不是我很困惑,我应该怎么回呢? – 2013-03-26 18:52:17

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

UPDATE
你也可能有一些问题连接到主机,以便您可以检查是否连接成功,像这样:

#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插座或ASIO提升,两者异步和更直观的

+0

请澄清你的答案,你指的是什么部分的问题。 – 2013-03-26 19:15:19

+0

你的代码很好,只需要将它包装在一个永久循环的while循环中,比你可以创建一个事件(通过按下键盘上的退出按钮或某物)并处理该事件以退出while循环(通过返回0或使用退出(0)),这样你的程序将继续运行(直到你按下退出按钮),并且你删除了编译器错误 – Sherlock 2013-03-26 19:19:59

+0

感谢您的回答,但它仍然无法正常工作,我刚刚发现这 cout <<“一些消息”; 不打印任何东西,是否有可能我配置了我的导入错误?那些额外的依赖关系是否正确? SDL.lib; SDL_net.lib; SDLmain.lib 我不知道还有什么可能是错的 – 2013-03-26 22:58:15

相关问题