2013-03-26 122 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

相關問題