PlanetSwitch Planet3DS PlanetVita PSP.de PlanetiPhone Classics Forum Handheld-Wiki

PGN-ID:[?] (Nicht eingeloggt)
Login
Registrieren
PlanetDS PlanetGameboy N-Page.de
portablegaming.de  

Zurück   portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung


Development Abteilung Ihr wollt für euren Lieblingshandheld Spiele oder Tools entwickeln?
Bitte die Präfixe benutzen!

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 20.02.2007, 17:48   #1
 
Benutzerbild von Dygera
 
Registriert seit: 07.02.2007
Ort: Hamburg
Alter: 33

Dygera wird schon bald berühmt werden

Dygera eine Nachricht über ICQ schicken Dygera eine Nachricht über MSN schicken
Standard C++ Structur übergeben

Hi,
weiß jemand, wie man eine Structur per Referenz an eine Funktion übergeben kann?
void funktion1(struct &meinestructur)

geht nicht.

void funktion1(struct *meinestructur)

geht auch nicht. Eigentlich ist das doch eine ganz normale Aktion bei C++. Ich glaube es liegt am GBA Compiler, dass das nicht geht. Aber vielleicht gibt es ja andere Möglichkeiten das selbe zu erreichen.

Ich will wie gesagt eine Structur an eine Funktion übergeben, da ich in der Funktion einige der Werte in der Structurvariable ändern will und das soll dann bitte auch global und nicht nur in der Funktion so übernommen werden.
Ich habe sogar Probleme, wenn ich nur die Structur übergeben will; ohne Referenz oder Pointer. Der Compiler sagt dann immer was von : is declared inside Parameter list. Aber dabei bin ich mir ziemlich sicher, dass wir das früher in der Schule genauso gemacht haben.
Dygera ist offline   Mit Zitat antworten
Sponsored Links
Alt 20.02.2007, 17:57   #2
 
Registriert seit: 06.02.2005
Alter: 32

zilluss hat die Renommee-Anzeige deaktiviert

Standard AW: C++ Structur übergeben

Hatt den Fehler noch nie aber es hört sich an als ob du irgendwas doppelt benennst innerhalb der Parameterlisten. Ausserdem: Kriegst du den Fehler beim Prototyp oder bei einem Funktionsaufruf. Schreib am besten mal den Programmabschnnitt mit dem Fehler hier rein.
zilluss ist offline   Mit Zitat antworten
Alt 20.02.2007, 18:42   #3
Jim männlich
 
Benutzerbild von Jim
 
Registriert seit: 14.08.2005

Jim hat die Renommee-Anzeige deaktiviert

Standard AW: C++ Structur übergeben

Also mit "struct" würdest du eine neue Struktur erstellen.
Z.B. struct Player;

Dann musst du in der Funktion das aber so aufrufen.
void Function(Player tempPlayer)

Hoffe das es dir weiterhilft.
Jim ist offline   Mit Zitat antworten
Alt 20.02.2007, 18:54   #4
Moderator
 
Benutzerbild von europa
 
Registriert seit: 05.10.2003
Ort: Berlin
Spielt gerade: Eclipse Helios

europa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengott
europa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengott

europa eine Nachricht über ICQ schicken
Standard AW: C++ Structur übergeben

kann der GBA überhaupt C++? Ich denke es wäre besser (und effizienter) da C zu nehmen.

Was "struct" angeht, dieses Schlüsselwort definiert eine Struktur. Normalerweise kann man das Wort außerhalb der Definition auslassen und sollte es auch tun. Mit struct würde ein Funktionskopf so aussehen:

void funktion1(struct MeineStructur &var)
void funktion1(struct MeineStructur *var)
void funktion1(struct MeineStructur var)

oder gleich ohne:

void funktion1(MeineStructur &var)

europa
__________________
"In der Informatik geht es genau so wenig um Computer, wie in der Astronomie um Teleskope" - Edsger W. Dijkstra
europa ist offline   Mit Zitat antworten
Alt 22.02.2007, 15:36   #5
 
Benutzerbild von Dygera
 
Registriert seit: 07.02.2007
Ort: Hamburg
Alter: 33

Dygera wird schon bald berühmt werden

Dygera eine Nachricht über ICQ schicken Dygera eine Nachricht über MSN schicken
Standard AW: C++ Structur übergeben

Zitat:
Zitat von Jim Beitrag anzeigen
Also mit "struct" würdest du eine neue Struktur erstellen.
Z.B. struct Player;

Dann musst du in der Funktion das aber so aufrufen.
void Function(Player tempPlayer)

Hoffe das es dir weiterhilft.

Ohmann ich glaube du hast Recht. Ein Structurtyp ist dann doch der Variablentyp
Ich werds gleich ausprobieren.


EDIT (autom. Beitragszusammenführung) :

Mein erster Fehler, der da war, dass ich struct statt des Structurtyps bei der Deklaration der Funktionen in die Klammer geschrieben hatte, ist damit behoben. Dafür habe ich jetzt neue Fehler gekriegt.
Hier der betreffende Code:

struct chara{
u16 posx; //Positionen
u16 posy;
u8 nummer; //Nummer des Characters; für Schleife
u8 direction;
}player, npc;


struct npcaction{
u8 nummer; //Nummer der Action
u16 zielposx; //Wohin sich der NPC bewegt
u16 zielposy;
u16 auslposx; //Bei welchem Playerstandort die Action ausgel wird
u16 auslposy;
u8 online; //Aktiv oder Nicht
}act1;




void checkactausl(chara player, npcaction &action, chara npc)
{
if(player.posx==action.auslposx && player.posx==action.auslposy)
{
action.online=1;
}
if(npc.posx==action.zielposx && npc.posy==action.zielposy)
{
action.online=0;
}
}


void npcaction(u8 online, chara &npc, npcaction action)
{
if(online==1 && npc.posx!=action.zielposx && npc.posy!=action.zielposy)
{
if(action.zielposx>npc.posx)
{npx.posx++;}
else if(action.zielposx<npc.posx)
{npx.posx--;}
if(action.zielposy>npc.posy)
{npc.posy++;}
else if(action.zielposy<npc.posy)
{npc.posy--;}
}
}


Zuerst werden die Structuren gleich mit 2 Structurvariablen erstellt. Dann sollen sie an die beiden Funktionen übergeben werden. Manche mit Referenz, manche ohne. Hier die Fehler die mir der Compiler gibt:


project.c:188: parse error before "player"
project.c: In function `checkactausl':
project.c:190: `action' undeclared (first use in this function)
project.c:190: (Each undeclared identifier is reported only once
project.c:190: for each function it appears in.)
project.c: At top level:
project.c:201: parse error before "chara"
project.c: In function `npcaction':
project.c:203: `online' undeclared (first use in this function)
project.c:203: `action' undeclared (first use in this function)
project.c:206: `npx' undeclared (first use in this function)

Als wenn die Typen nicht funktionieren würden.


EDIT (autom. Beitragszusammenführung) :

Moin Leute;
jemand ne Ahnung was man da machen kann?

Ich habe inzwischen schon alles mögliche probiert, aber es will nicht. Dabei bin ich mir sicher, wir hatten das in der Schule genauso gemacht und da hats geklappt. Naja war aber ein anderer Compiler.

Geändert von Dygera (22.02.2007 um 15:36 Uhr) Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!
Dygera ist offline   Mit Zitat antworten
Alt 22.02.2007, 17:15   #6
Jim männlich
 
Benutzerbild von Jim
 
Registriert seit: 14.08.2005

Jim hat die Renommee-Anzeige deaktiviert

Standard AW: C++ Structur übergeben

Bis auf den Fehler das du 2mal in der 2 Fuktion "npx" statt "npc" geschrieben hast, hat Dev-C++ (hatte grad nichts anderes zur Hand) den Code eigentlich fehlerfrei compiliert.

Aber schau mal nach den "parse Errors". Da scheint irgend etwas mit den Parametern in der Funktion nicht zu klappen.

Geändert von Jim (22.02.2007 um 17:19 Uhr)
Jim ist offline   Mit Zitat antworten
Alt 22.02.2007, 20:59   #7
Moderator
 
Benutzerbild von europa
 
Registriert seit: 05.10.2003
Ort: Berlin
Spielt gerade: Eclipse Helios

europa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengott
europa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengott

europa eine Nachricht über ICQ schicken
Standard AW: C++ Structur übergeben

@Dygera
was für einen Compiler benutzt Du? Außerdem ist dein Schreibstil schlecht. Eigene Typen oder Strukturen benennt man entweder mit Großbuchstaben, oder man schreibt alles groß. Z.B. MeinDatentyp oder MEIN_DATENTYP. So hebt man diese von dem Variablen und den einfachen Datentypen ab.

Außerdem, wenn Du schon Fehlermeldungen mit Zeilennummern postest, dann poste auch den Code mit passenden Zeilennummern. Im Forum gibt es Tags fürs Code reinstellen, "code":

Code:
void function(VarType var1, VarType var2)
 {
 // Text
 }
europa
__________________
"In der Informatik geht es genau so wenig um Computer, wie in der Astronomie um Teleskope" - Edsger W. Dijkstra

Geändert von europa (22.02.2007 um 21:00 Uhr)
europa ist offline   Mit Zitat antworten
Alt 23.02.2007, 14:38   #8
 
Benutzerbild von Dygera
 
Registriert seit: 07.02.2007
Ort: Hamburg
Alter: 33

Dygera wird schon bald berühmt werden

Dygera eine Nachricht über ICQ schicken Dygera eine Nachricht über MSN schicken
Standard AW: C++ Structur übergeben

Hi,
ja das mit den Zeilennummern ist dumm gelaufen. Aber wenn ich die markier werden die nicht mitkopiert. Bei dem npx hatte ich mich vertippt. Habs korrigiert, das war jedoch nicht der Hauptfehler.

Mein Compiler ist in einem ganzen Set aus Tools zur GBA-Programmierung gewesen. Das heißt DevKitAdv (die Compiler-Exe heißt nur Gcc.exe). Ich hatte mir schon gedacht, dass es vielleicht am Compiler liegen könnte, da ich mir fast sicher bin, dass das früher genauso funktioniert hat. Ich weiß auch nicht, was der Parse-Error soll. Vielleicht ist das ja ein C Compiler und dieses Structurenübergeben gibts erst in C++?!?


EDIT (autom. Beitragszusammenführung) :

Hi Leute,
das Problem ist behoben.

Der einzige Fehler war, dass die Endung der Quelldatei .c und nicht .cpp war.
Damit hat der Compiler das ganze höchstwahrscheinlich für C und nicht für C++Code gehalten.

Geändert von Dygera (23.02.2007 um 14:38 Uhr) Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!
Dygera ist offline   Mit Zitat antworten
Alt 23.02.2007, 15:36   #9
Moderator
 
Benutzerbild von europa
 
Registriert seit: 05.10.2003
Ort: Berlin
Spielt gerade: Eclipse Helios

europa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengott
europa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengotteuropa ist ein Forengott

europa eine Nachricht über ICQ schicken
Standard AW: C++ Structur übergeben

ich habe mein C Buch rausgekramt und in C muss man es wirklich so schreiben:

void funktion1(struct MeineStructur &var);

d.h. "struct" muss immer da stehen. In C++ wurde es abgeschafft. Für den GBA empfehle ich in C zu programmieren, wegen der späteren Optimierung.

europa
__________________
"In der Informatik geht es genau so wenig um Computer, wie in der Astronomie um Teleskope" - Edsger W. Dijkstra
europa ist offline   Mit Zitat antworten
Alt 24.02.2007, 16:04   #10
 
Benutzerbild von Dygera
 
Registriert seit: 07.02.2007
Ort: Hamburg
Alter: 33

Dygera wird schon bald berühmt werden

Dygera eine Nachricht über ICQ schicken Dygera eine Nachricht über MSN schicken
Standard AW: C++ Structur übergeben

Zitat:
Zitat von europa Beitrag anzeigen
ich habe mein C Buch rausgekramt und in C muss man es wirklich so schreiben:

void funktion1(struct MeineStructur &var);

d.h. "struct" muss immer da stehen. In C++ wurde es abgeschafft. Für den GBA empfehle ich in C zu programmieren, wegen der späteren Optimierung.

europa

Spätere Optimierung?
Das könnte meine Performanceprobleme erklären.

Ich glaube aber ich habe das sogar so ausprobiert, probiers nochmal eben.


EDIT (autom. Beitragszusammenführung) :

wenn ich da ein struct davorschreibe kommen folgende fehler:

project.c:190: parse error before '&' token
project.c: In function `checkactausl':
project.c:192: `action' undeclared (first use in this function)
project.c:192: (Each undeclared identifier is reported only once
project.c:192: for each function it appears in.)
project.c: At top level:
project.c:203: parse error before '&' token
project.c: In function `npcaction':
project.c:205: `online' undeclared (first use in this function)
project.c:205: `action' undeclared (first use in this function)


EDIT (autom. Beitragszusammenführung) :

Der Compiler mag mich nicht.

Wenn ich in die Parameter-Klammern der Funktion immer ein struct mit davorschreibe und die Datei .c heißt, meckert der Compiler.

Wenn ich das struct weglasse und die Datei .cpp heißt, gehts.
Ist dann aber eine C++-Datei und man sollte ja besser mit C arbeiten.

Geändert von Dygera (24.02.2007 um 16:04 Uhr) Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!
Dygera ist offline   Mit Zitat antworten
Alt 25.02.2007, 16:17   #11
 
Benutzerbild von Dygera
 
Registriert seit: 07.02.2007
Ort: Hamburg
Alter: 33

Dygera wird schon bald berühmt werden

Dygera eine Nachricht über ICQ schicken Dygera eine Nachricht über MSN schicken
Standard AW: C++ Structur übergeben

Ich mir ich schreib hier mal die Lösung für mein Problem hin, falls jemand diesen Thread liest und das selbe Problem hat.
(Structur als Pointer an Funktion übergeben)
Folgendes funktioniert unter C, wenn die Datei also mit .c (nicht .cpp) endet.
1. Structur ganz normal mit dem struct-Befehl erstellen.
2. Bei der Funktionsdeklaration schreibt man in den Parameterklammern:
struct StructurTyp *NamewiesiedieStructurinderFunktionhabensoll
3. Um in der Funktion auf die Structurvariablen zuzugreifen reicht nicht:
Structurname.VarName=1;
Sondern:
Structurname->Varname=1;
oder
(*Structurname).Varname=1;

4. Der Aufruf im int main():
Funktionsname(&StructurwiesieimHauotorogrammheißt) ;


Bis ich das als C-N00b rausgefunden hatte, ist so einige Zeit vergangen.
Wenn man erst mit C++ gearbeitet hat, ist man gewohnt solche Probleme mit Referenzen zu lösen/was hier halt nicht geht.
Deshalb hoffe ich jemandem hiermit geholfen zu haben.
Dygera ist offline   Mit Zitat antworten
Antwort

  portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an



Alle Zeitangaben in WEZ +2. Es ist jetzt 02:16 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0
Template-Modifikationen durch TMS
PortableGaming.de © bk 2000 - 2010

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231