Seltsame Fehlermeldung
-
Also wenn ich mir den Quelltext mal so überfliege, täten einige Grundlagenkenntnisse bestimmt nicht weh... Angeblich soll es sowas wie Arrays (vector) geben, Klassen, Objekte, Design Pattern (MVC) etc..
Ich hab selten mal Dateien die signifikant über 1000 Zeilen haben
mfg
xXx
-
-=]xXx[=- schrieb:
Also wenn ich mir den Quelltext mal so überfliege, täten einige Grundlagenkenntnisse bestimmt nicht weh...
Genau!
@Schneps: Die QuellZeilen aus deinem Eingangspost könnten z.B. eine Schleife vertragen... ;o)
MfG
-
Hi,
um die Herkunft der Fehlermeldung etwas zu erhellen; nach einer Volltextsuche im Verzeichnis des BCB6 nach
import.cpp findet sich in der ilink32.dll als auch ilink32.exe :StringBlock Type names External types Public types SegRelocs Line number cache OBJ symbols Import symbols Publics Public GSX Extdefs Extdef flags Virdefs Config [b]C:\src\ilink\import.cpp[/b] BlockIndex >= 0 && BlockIndex < sizeof(MemConfig) / sizeof(MemConfig[0]) Config->CurrentSize >
-
ich kann -=]xXx[=- nur zustimmen, außerdem fehlt eine ordentliche Einrückung und die if-Bedingungen kann man mit ODER (||) oder UND (&&) zusammenfassen
ich schätze mal mit Arrays, Klassen, ordentlichen Schleifen und Abfragen in seperaten Funktionen kann man den Quellcode glatt halbieren...
-
Linnea schrieb:
[...]
ich schätze mal mit Arrays, Klassen, ordentlichen Schleifen und Abfragen in seperaten Funktionen kann man den Quellcode glatt halbieren...
Oder anders herum: Wenn ich meine Quelltexte in aneinandergereihte Anweisungen "auflösen" würde, wäre der Quelltext - geschätzt - 10mal so lang!
-
Hallo,
also erstmal danke für eure Hilfe. Ich habe den Code jetzt erstmal auf unter 65.000 Zeilen gedrückt. Nun kommt aber immernoch die Fehlermeldung... Also scheints daran anscheinend auch nicht gelegen zu haben. Und ohne jetzt auch den ganzen Text umschreiben zu müssen. Gibt es da nicht andere Kompilierer mit denen ich den Text kompilieren kann?
gruß Schnebs
-
Ach mist, was vergessen.
Wie geht das genau mit dem "Text auslagern"? Kann mir das vll jemand näher erklären?gruß Schnebs
-
hast du mal RandomAccess85 und Akaris Vorschlag versucht?
[Edit]
Menu -> Datei -> Neu -> Unit
dann z.b. eine komplette ButtonClick-Methode aus deiner Haupt-cpp in die neue Unit schieben (einschließlich Funktionskopf)
die neue Unit speichern
dann in der alten Unit einfügen (ganz oben)#include "name-der-neuen-unit.h"
und dann sollte das gehen
allerdings mußt das mit einigen Funktionen machen...
noch etwas: was du da machst nennt man übrigends Fleißarbeit, hat aber leider nicht viel mit programmieren zu tun
[Edit2]
naja, ok, ganz so einfach ist es nicht, da du haufenweise globale Variablen verwendestdie ganze Variablen vom Anfang deiner Unit mußt du mal in die Header-Date verschieben
dann in der neunen Unit einfügen (ganz oben)
#include "name-der-alten-unit.h"
-
So, habe nun das meiste in eine 2te Datei ausgelagert und die Fehlermeldung ist weg. Nun ist, wie gesagt, das Problem, dass die, in der ersten Datei bereits geänderten Variablen, nicht in der 2ten Datei sind. Also, ich kann die Variablen deklarieren aber sie ändern sich halt nicht bzw, die 2te Datei bekommt davon nichts mit. Wie kann ich das ändern?
gruß Schnebs
-
Linnea schrieb:
[Edit2]
naja, ok, ganz so einfach ist es nicht, da du haufenweise globale Variablen verwendestdie ganze Variablen vom Anfang deiner Unit mußt du mal in die Header-Date verschieben
dann in der neunen Unit einfügen (ganz oben)
#include "name-der-alten-unit.h"
-
Mhhh ich frage mich nur gerade warum du krampfhaft versuchst, Unsinn zum laufen zu bekommen...
Versuch doch mal, nicht den BCB so zu manipulieren, das er deinen Code frisst, sondern den Code so zu ändern, das er "gut" ist.Beispiele:
Die globalen Variablen (das ab Zeile 10) die du hast, könnten z.B. in eine GameController-Klasseclass GameController { String Server; int ErrorCode; int Schwertkaempfer ; int Kaserne11; int Baeckerei11; int Baeckerei22; int Holzfaeller11; int Holzfaeller22; int Nahrung; int Holz; int Muehle; int Markt; int BauplatzA[19]; }
Wissenschaft präsentiert: Klassen und Arrays... Viel Spass beim Nachbauen.
Allein durch die Benutzung von Arrays, Schleifen und Objekte die mehrere Eigenschaften zusammenfassen wirst du deinen Quelltext auf bestimmt 5000 Zeilen verringern können.mfg
xXx
-
Mhhh ich frage mich nur gerade warum du krampfhaft versuchst, Unsinn zum laufen zu bekommen...
Weil ich den Unsinn nicht groß umschreiben will. Ich mache jetzt so weiter wie ihr mir gesagt habt. Aber ich will erstmal das alte zum Laufen bringen. Ich will nämlich nicht viel Zeit aufwänden, für Sachen, die eigl schon fertig sind.
-
aber dein Programm ist doch noch garnicht komplett fertig und wenn du so weiter machst hast du zum Schluß ca. 200000 Zeilen Quellcode und blickst nicht mehr durch
warum vereinfachst du nicht mit ein paar Funktionen das Quellcodeschreiben, z.B. Quellcodestücke die immer wieder in ähnlicher Form auftreten:
if (Holz >= 20) if (Nahrung >= 20) if (Bauplatz1a == 2) if (Ausgewaehlt == 2) { Bauplatz1->Width = 81; Bauplatz1->Height = 105; Bauplatz1->Picture->LoadFromFile ("graphics\\mühlebaustelle.bmp"); } if (Holz >= 20) if (Nahrung >= 20) if (Bauplatz2a == 2) if (Ausgewaehlt == 2) { Bauplatz2->Width = 81; Bauplatz2->Height = 105; Bauplatz2->Picture->LoadFromFile ("graphics\\mühlebaustelle.bmp"); } ...
ist doch eigentlich immer das gleiche, außer daß das Bauplatz-Image und die Bauplatz-Variable sich ändert, also mach doch einfach ne Funktion:
void TForm1::NewBauplatz(TImage *BauplatzImg, int Bauplatz) { if ( (Holz >= 20) && (Nahrung >= 20) && (Bauplatz == 2) && (Ausgewaehlt == 2) ) { BauplatzImg->Width = 81; BauplatzImg->Height = 105; BauplatzImg->Picture->LoadFromFile ("graphics\\mühlebaustelle.bmp"); } } //Aufruf NewBauplatz(Bauplatz1, Bauplatz1a); NewBauplatz(Bauplatz2, Bauplatz2a); ...
und schon sinds mind 1500 Zeilen weniger, vorallem wenn du diese Funktion mit einem Enum und einem Switch noch für alle Haustypen machst, und wenn du dann einen Haustyp hinzufügst ist der neue Quellcode kurz und übersichtlich
wenn du dann noch die Bauplätze in ein Array packst kannst du den Aufruf einfach in einer Schleife abarbeiten
-
Moin nochmal,
So... Ich habe den Text jetzt nach vielen Optimierungen auf 35.000 zeilen verringert. Nun habe ich noch eine Frage (Ich wollte nicht extra einen neuen Thread aufmachen)... Und zwar: Mein Programm ist ja eine Art Spiel. Nun brauch ich noch eine KI. Der Gegner soll auf einer Fläche von 60 Feldern mit seinen Einheiten hinter meine Einheiten kommen und Angreifen... Wie bekomme ich so etwas am besten hin? Mit einem Min-Max-Algorithmus?
gruß Schnebs
-
Hallo
Du solltest aber einen neuen Thread aufmachen. Und wenn es dir erstmal nur ums Prinzip der KI geht, dann sogar besser im rudpf. Selbst im Spieleforum wirst du mehr Leute finden die sich mit sowas auskennen.
bis bald
akari
-
Ok, danke.