Instanz an Funktion übergeben
-
Als Referenz uebergeben, das heisst
grndstion_prtcl_step(Protocol &udp_conn)oder wenn udp_conn in der Funktion nicht verandert wird, dann
grndstion_prtcl_step(const Protocol &udp_conn)
-
K2daL schrieb:
grndstion_prtcl_step
Die letzten paar Vokale hättest du aber auch noch weglassen können.
-
Super, danke! Das mit den Referenzen hat prima geklappt! Weiterführend stehe ich aber vor einem ähnlichen Problem. In die Funktion soll eine weitere Instanz einer anderen Klasse eingefügt werden. Diese Instanz bekommt aber Parameter übergeben. Ein Auszug aus der Klasse sieht wie folgt aus:
class Udp_prtcl_connection { public: #ifdef matlab_ Udp_prtcl_connection(SimStruct *S,unsigned short port_number, int a1, int a2, int a3, int a4, char serve_1_clien_0 ); #else Udp_prtcl_connection(unsigned short port_number, int a1, int a2, int a3, int a4, char serve_1_clien_0 ); #endifIch habe also folgende Instanz außerhalb der Funktion erstellt:
Udp_prtcl_connection Udp_port1_conn(46, 192, 168, 0, 193, 0);und rufe die Funktion auf:
grndstion_prtcl_step(UDP_conn, Udp_port1_conn);Die Funktionsdefinition sieht ähnlich aus wie oben, jedoch wurde sie durch die Funktion udp_transmit() der Klasse Udp_prtcl_connection erweitert.
void grndstion_prtcl_step(Protocol &UDP_conn, Udp_prtcl_connection &Udp_port1_conn(unsigned short port_number, int a1, int a2, int a3, int a4, char serve_1_clien_0)){ char first_sig_descr[28] = "Never incom message"; char second_sig_descr[28] = "The Second funny"; static double datas_in = 0; int tx_buf_size = 500; char tx_buffer[SPI_RX_TX_SIZE] = "GET TIME\r\n"; char rx_buffer[500]; int i; int UDP_TIMEOUT = 50; for(i=0;i<500;i++){ rx_buffer[i]=0; tx_buffer[i]=0; } datas_in= 35991; static float myfloat=297.861; UDP_conn.Signal_do(300,first_sig_descr, 7,&datas_in,PRIO_HIGH,DIR_OUT, DOUBLE); UDP_conn.Signal_do(301,second_sig_descr, 7,&myfloat,PRIO_HIGH,DIR_OUT, SINGLE); int buffer_written = UDP_conn.write_tx_buf(tx_buffer); printf("The written Byte num: %d \n", buffer_written); int udp_trans = Udp_port1_conn.udp_transmit(tx_buffer, rx_buffer,SPI_RX_TX_SIZE ,SPI_RX_TX_SIZE, UDP_TIMEOUT); }Der Fehlercode sagt folgendes:
tcp_lib.h:17: error: redefinition of 'class Udp_prtcl_connection' tcp_lib.h:18: error: previous definition of 'class Udp_prtcl_connection'In der tcp_lib.h ist die Klasse Udp_prtcl_connection definiert.
Für weitere Hilfe wäre ich sehr dankbar! Und wie gesagt, bin kein C++-Spezialist.
-
Lies bitte erstmal ein gutes Gurndlagenbuch. Bei deinen Wissenslücken hat es recht wenig Sinn, an der Stelle weiterzumachen, an der du dich gerade befindest.
sorry, wenn das jetzt etwas zu direkt ist. Aber sowas
void grndstion_prtcl_step(Protocol &UDP_conn, Udp_prtcl_connection &Udp_port1_conn(unsigned short port_number, int a1, int a2, int a3, int a4, char serve_1_clien_0)){ist schon recht eigenwillig. Willst du hier der Funktion eine Funktion übergeben? Oder was genau ist dein Ziel?
-
void grndstion_prtcl_step(Protocol &UDP_conn, Udp_prtcl_connection &Udp_port1_conn(unsigned short port_number, int a1, int a2, int a3, int a4, char serve_1_clien_0))Das macht keinen Sinn. Was soll die verschachtelte Klammer?
Ich empfehle übrigens irgendein (gutes!) Grundlagenbuch zu C++. Das hier ist kleines Einmaleins, das muss sitzen. Siehe zweiter und vierter Link in meiner Signatur. "Thinking in C++" ist davon sogar ein freies Ebook, da kann es keine Ausreden des Geldes wegen geben.
Und benutz Vokale! Im Arabischen mag man ohne auskommen, aber in den indogermanischen Sprachen sind sie wichtig!
-
Mir ist klar, dass ich einer Funktion keine Funktion übergeben kann, aber gibt es denn sonst irgendeine Möglichkeit Instanzen mit Parametern zu übergeben?
-
SeppJ schrieb:
void grndstion_prtcl_step(Protocol &UDP_conn, Udp_prtcl_connection &Udp_port1_conn(unsigned short port_number, int a1, int a2, int a3, int a4, char serve_1_clien_0))Das macht keinen Sinn. Was soll die verschachtelte Klammer?
Die Syntax ist (AFAICS) korrekt. Die Notation kennst du doch

Mir ist klar, dass ich einer Funktion keine Funktion übergeben kann
Doch doch, kann man.
-
K2daL schrieb:
Mir ist klar, dass ich einer Funktion keine Funktion übergeben kann,
Doch, das geht.
aber gibt es denn sonst irgendeine Möglichkeit Instanzen mit Parametern zu übergeben?
Wieso eine Instanz mit Parametern? Übergib die Instanz!
daddy_felix hat schon Recht, es macht nicht groß Sinn, dir zu helfen, so lange du weder die grundlegende Syntax beherrscht, noch überhaupt eine richtige Vorstellung davon hast, was ein Objekt überhaupt ist.
-
Sone schrieb:
Die Syntax ist (AFAICS) korrekt. Die Notation kennst du doch

Nicht für das, was er vor hat. Er hat bloß zufällig etwas getroffen, was syntaktisch richtig ist. Möglicherweise sogar durch bloßes Ausprobieren, da man in C++ jeden Mist zu etwas syntaktisch richtigem zurecht biegen kann, wenn man bloß genügend Klammern, Sternchen und Ampersande dranschmeißt.
Deswegen ist es auch gerade so wichtig, dass man ganz genau weiß, wieso man wo welches Zeichen setzt. Jedes Sternchen kann den Sinn eines Ausdrucks komplett verändern. Siehe:
http://magazin.c-plusplus.net/artikel/(Humor) Die Entstehungsgeschichte von C
-
SeppJ schrieb:
Jedes Sternchen kann den Sinn eines Ausdrucks komplett verändern. Siehe:
http://magazin.c-plusplus.net/artikel/(Humor) Die Entstehungsgeschichte von CWobei das Beispiel dort Kinderkram ist.
Dass es seltsam aussieht kommt auch nur durch den Einsatz von Zeichen wie "|" in Strings und der komplett bescheuerten Formatierung zustande.
Wenn man das mit sinnvollen Namen und passend eingerückt hinschreibt ist es überhaupt nicht schlimm.Da sind in C (mit oder ohne ++) und auch in anderen Sprache viel schlimmere Sachen möglich.
-
hustbaer schrieb:
Da sind in C (mit oder ohne ++) und auch in anderen Sprache viel schlimmere Sachen möglich.
Schamlos vom IOCCC geklaut:
int _;main(O,l,o)char**l,**o;{_++>>9||main(1&(o?(int)o:clown:|O*2,l,putchar(_%32?atoi(1[l])>>(7&O<<!o>>!o+29)&32<_|_==16?35:32:10)%10);}Sieht auf den zweiten Blick auch recht einfach aus (wie der von der Witzeseite), aber wenn man tiefer eintaucht, sind da doch ein paar ganz schön merkwürdige Operationen drin. Und natürlich zählt auch hier jedes Zeichen und ein Programmierer sollte zumindest benennen können, was die einzelnen Operationen alle machen. Selbst wenn die Anordnung sehr komisch ist (ich blicke selbst nicht so ganz durch).