error: expected constructor... [MEGOLDVA]

 ( Kuvik | 2010. február 21., vasárnap - 16:51 )

Szerk.:

A működő változat:
(csak hogy ne a hülyeség maradjon itt, htha valakit érdekel a socket)


#include stdlib.h
#include stdio.h
#include string.h
#include signal.h
#include netdb.h
#include sys/prctl.h
#include netinet/in.h
#include arpa/inet.h
#include sys/types.h
#include sys/socket.h

int main(){

int my_socket;
int length;

struct sockaddr_in me;
struct sockaddr_in dest;

char buf[ ]="proba";

my_socket = socket( AF_INET, SOCK_DGRAM, 0 );

me.sin_family = AF_INET;
me.sin_port = htons(12343);
me.sin_addr.s_addr = inet_addr("127.0.0.1");
memset( &(me.sin_zero), '\0', 8 );

dest.sin_family = AF_INET;
dest.sin_port = htons(12344);
dest.sin_addr.s_addr = inet_addr("127.0.0.1");
memset( &( dest.sin_zero), '\0', 8 );

length = sizeof( struct sockaddr_in );
bind( my_socket, (struct sockaddr *)&me, length );

sendto( my_socket, buf, strlen(buf), 0, (struct sockaddr *)&dest, length );

return 0;

}

--------------------------------------

Hello,

újabb kérdésem van.
UDP-s kommunikációt szeretnék készíteni, de nem fordul, még rosszabb, hogy nem tudom miért :)
Egyébként a hiba nem valószínű, hogy kifejezetten az UDP-implementáció miatt van, valószínűleg hiányzik egy header, vagy ilyesmi, de sehogy sem sikerült rájönnöm, hogy mi.

A kód:

#include stdlib.h
#include stdio.h
#include iostream
#include string.h
#include signal.h
#include netdb.h
#include sys/prctl.h
#include netinet/in.h
#include sys/types.h
#include sys/socket.h

using namespace std;

int my_socket;
int length;
struct sockaddr_in me;
struct sockaddr_in dest;

char buf[ ]="proba";

my_socket = socket( AF_INET, SOCK_DGRAM, 0 );

me.sin_family = AF_INET;
me.sin_port = 0;
me.sin_addr = INADDR_ANY;
memset( &(me.sin_zero), '\0', 8 );

dest.sin_family = AF_INET;
dest.sin_port = htons(12344);
dest.sin_addr = inet_addr("127.0.0.1");
memset( &( dest.sin_zero), '\0', 8 );

length = sizeof( struct sockaddr_in );
bind( my_socket, (struct sockaddr *)&me, length );

int main(){
sendto( my_socket, buf, strlen(buf), 0, (struct sockaddr *)&dest, length );
return 0;
}

-----------------
A hibaüzenet:

client2.cpp:21: error: expected constructor, destructor, or type conversion before ‘=’ token
client2.cpp:23: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:24: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:25: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:26: error: expected constructor, destructor, or type conversion before ‘(’ token
client2.cpp:28: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:29: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:30: error: expected constructor, destructor, or type conversion before ‘.’ token
client2.cpp:31: error: expected constructor, destructor, or type conversion before ‘(’ token
client2.cpp:33: error: expected constructor, destructor, or type conversion before ‘=’ token
client2.cpp:34: error: expected constructor, destructor, or type conversion before ‘(’ token

a 21. sor egyébként a my_socket = socket( AF_INET, SOCK_DGRAM, 0 );

----------------

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Hu, ez gaz! Mielott UDO-vel kezdenel jatszadozni, illene megbaratkoznod magaval a nyelvvel, tudod, hello world, stb...

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

?

Nem értem egészen mit akarsz. Mi az UDO?
Ha arra gondolsz, hogy ronda, ez egy proof of concept kód az UDP szempontjából, kb. 5 perc alatt ütöttem össze innen kimásolva:

http://informatik.unibas.ch/lehre/ss06/cs221/_Downloads/cs221-socket-slides.pdf

gyakorlatilag megegyezik a 13. oldallal

Milyen legyen?

Az rendben van, de először tedd tisztába magadban, hogy mi a deklaráció és mi a definíció, valamint, hogy a programkódot hova kell rakni. Továbbá, ha már C++ -l játszadozol, akkor először nézz még utána, hogy hogy szokás egy OOP nyelvben kódolni.

----------------
Lvl86 Troll

Köszönöm, de ezekkel tisztában vagyok. :( Esetleg, hogy miért nem fordul?

Ha tisztába lennél, már rég észrevetted volna, hogy ez programkód, amit egy függvényen belül szokás elhelyezni.

A következő rész még valóban lehet függvénytörzsön kívül, de nem szép OOP nyelvben mindenféle globális változóval játszadozni.

int my_socket;
int length;
struct sockaddr_in me;
struct sockaddr_in dest;

char buf[ ]="proba";

C++ az nem PHP, hogy szinte ott túrsz bele bármibe, ahol jól esik.

----------------
Lvl86 Troll

subscribe a konokságod miatt. Kívácsi vagyok, miket hordasz még itt össze.

Ide még csak iostream, meg std namespace sem kell, a programod gcc-vel lefordul, csak a kódot a main()-be kéne tenni. Aztán van benné még butaság, amikor az értékadó egyenlő jel baloldalán valami struct in_addr van, a jobb oldalán meg egy integer. Valami ilyesmi lenne szintaktikailag helyesen, persze át kéne tanulmányozni a struct sockaddr_in-t: me.sin_addr.s_addr = INADDR_ANY;

és ofkoz megnéztem a linkelt pdf-et, ott sem mondja sehol, hogy ezt main()-en kívül kell írni.

nem vagyok konok, hülyeséget csináltam, ld. lejjebb. Azt, hogy a main-en kívülre került, azt konkrétan nem abból szedtem, hanem egy másikból, de ott sem a main-en kívül volt, csak elnéztem, mert ott egy headerben volt, és főleg azzal foglalkoztam, és nem néztem meg rendesen, hogy valójában hol az #include, de ez most már mindegy.

> nem vagyok konok
Érzed az önellentmondást, igaz? Mindegy, szerintem örülj neki, hogy a tudatlanságod ellenére ennyien segítettünk, és csak páran küldtek el melegebb éghajlatra.

Nem lett volna szánalmas bevallani, hogy fogalmad sem volt róla, elvégre mi sem C-tudással születtünk, így viszont azzá váltál.

Akkor jó :P

Nézd, nem tudom mit kellene még tennem, leírtam, hogy rájöttem, hogy hülyeséget csináltam és bocsánatot is kértem mindenkitől (ld. lejjebb). Persze, ha ennek ellenére te, vagy más nekem akar rontani, azzal nem tudok mit kezdeni.

Nem baj, hogy beleugrott a dologba, mert nekem nagyon hasznos tananyagok születnek így.
--
unix -- több, mint kód. filozófia.
Life is feudal

Üdv!
Szerintem kezdetnek tedd át a using namespace és a main közötti részt a main-be!
Szinte biztos hogy amiatt panaszkodik, a main függvényen kívül max globális változó deklarációkat tehetsz, függvényhívásokat nem.

Köszönöm, a függvényhívások jogos. Viszont egy másik példában ahonnan még vettem ötleteket, ott is így volt. Ott miért működhetett?

mert nem értesz hozzá. azért.

Fogalmam sincs mi volt abban a példában úgyhogy nem tudom miért működhetett. ;)
Mindenesetre ilyet ne csinálj, globális változókat általában nem szép használni.
Én is csak azt tudom tanácsolni, hogy mielőtt hálózatkezeléssel meg ilyesmivel foglalkoznál, előbb ismerkedj meg a nyelvvel jobban.

Huh, megvan, hogy ott miért "működött", benéztem. Ott headerekben volt a cucc és azt néztem el, hogy hol volt az #include.

De a kérdéses kódrészletnek nem headerbe kell kerülnie, hanem a függvénytörzsbe. Csupán az int main(int argc; char** arg) { -t kellett volna feljebb tolni egy 15 sorral...

----------------
Lvl86 Troll

Na, működik.

Bocsánat mindenkitől, jogos az értetlenkedés, ezt csúnyán benéztem. Ma vaéahogy agynélküli üzemmódban vagyok és ész nélkül másoltam a kódrészleteket. De most ettől függetlenül sem tudnék értelmes magyarázatot adni rá, hogy miért csináltam triviális hülkyeségeket.