Dannyboy Geschrieben 22. November 2007 Geschrieben 22. November 2007 Hallo Leute, wie der Titel es bereits vermuten läßt bekomme ich im Borland Builder folgende Fehlermeldung: [C++ Fehler] U_Main.cpp(1439): E2108 Ungültige Verwendung von typedef 'AnsiString' [C++ Fehler] U_Main.cpp(1439): E2379 In Anweisung fehlt ; (wobei letzterer soviel ich weiß mit dem ersten Fehler zusammenhängt). Da ich in C++ leider sehr, sehr wenige Kenntnisse habe, allerdings dort etwas anpassen muss, hänge ich an obiger Hürde. Und da unser einziger C++ Entwickler mittlerweile nicht mehr bei uns beschäftigt ist (wir aber ansonsten eh komplett auf Java setzen) ist dies nicht gerade einfach. Anbei mal der Quellcode. Die Funktion Nullen füllt Zahlen unter einer übergebenen Zahl iLen an Zeichen mit Nullen auf. Zunächst die U_Main.cpp AnsiString TfrmHauptmenue::Nullen(AnsiString str, int iLen){ AnsiString dummy; for (int i=0;i<(iLen-str.Length());i++){ dummy += "0"; } return dummy + str; } Und hier die Header-Datei U_Main.h: private: ..... AnsiString Nullen(AnsiString,int); ...... Hat es etwas mit einen ungültigen Datentypen zu tun? Könnt Ihr mir vielleicht nen Tipp geben, was der Fehler aussagt? Danke im vorraus. Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 Ich vermute, dass diese Methodendefinition innerhalb einer anderen Methode/Funktion steht, möglicherweise weil oberhalb eine schließende geschweifte Klammer vergessen wurde. Um das genauer zu beurteilen, müsstest du schon etwas mehr vom Code zeigen (und kennzeichnen, welche die Zeile 1439 ist). Übrigens: Wenn du statt QUOTE-Tags CODE-Tags benutzt, geht die Einrückung nicht verloren. Zitieren
Dannyboy Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Erstmal danke für die schnelle Antwort :uli //############################################################################## //# Beschreibung: //# Speichern der ermittelten Daten in der Datenbank //# //# //############################################################################## cgFillIKV->Visible = true; cgFillIKV->Progress = 10; dmDataInfo->qurIKV->Active=false; dmDataInfo->qurIKV->SQL->Clear(); strSQL = "Insert Into FILEINFO (FILENUM," "RECCOUNT," "CREATEDATE," "SENDDATE) " "Values ('"+NewFileNum+"'," "'"+RecCount+"'," "'"+CreateDate+"'," "'"+SendDate+"')"; dmDataInfo->qurIKV->SQL->Add(strSQL); dmDataInfo->qurIKV->ExecSQL(); dmDataInfo->qurIKV->Active=false; dmDataInfo->qurIKV->SQL->Clear(); for (int i=0;i<RecCount;i++){ strSQL = "INSERT INTO FILECONTENT (FILENUM, " "IKNUMBER, " "SPID, " "VALIDITYDATE, " "REQUESTKEY, " "TITLE, " "NAME1, " "NAME2, " "NAME3, " "NAME4, " "H_STREET, " "H_COUNTRYTAG, " "H_ZIPCODE, " "H_LOCATION, " "M_COUNTRYTAG, " "M_ZIPCODE, " "M_LOCATION, " "M_MAILBOXNUM, " "A_ZIPCODE, " "A_MAILBOXNUM, " "GROUP_IK, " "PREELECTION, " "PHONE, " "FAXPREELECTION, " "FAX, " "MOBIL, " "CHANGESERVICE, " "CLASSIFICATION, " "STATE, " "ADMINDISTRICT, " "KV_AREA, " "KZV_AREA, " "BANKCOUNTRYKEY, " "BANKCODENUM, " "ACCOUNTNUM, " "BANKNAME, " "ACCOUNTHOLDER, " "IBAN, " "BIC, " "ACCOUNTHOLDER_A) \n" "VALUES (" "'"+NewFileNum+"'," "'"+objDataRecord[i].GetIK()+"'," "'"+objDataRecord[i].GetSPID()+"'," "'"+Date().FormatString("dd.mm.yyyy")+"'," "'"+objDataRecord[i].GetRequestkey()+"'," "'"+objDataRecord[i].GetTitle()+"'," "'"+LeftStr(objDataRecord[i].GetName1(),28)+"'," "'"+LeftStr(objDataRecord[i].GetName2(),28)+"'," "'"+LeftStr(objDataRecord[i].GetName3(),28)+"'," "'"+LeftStr(objDataRecord[i].GetName4(),28)+"'," "'"+objDataRecord[i].GetH_Street()+"'," "'"+objDataRecord[i].GetH_Countrytag()+"'," "'"+objDataRecord[i].GetH_ZipCode()+"'," "'"+objDataRecord[i].GetH_Location()+"'," "'"+objDataRecord[i].GetM_Countrytag()+"'," "'"+objDataRecord[i].GetM_ZipCode()+"'," "'"+objDataRecord[i].GetM_Location()+"'," "'"+objDataRecord[i].GetM_MailBoxIn()+"'," "'"+objDataRecord[i].GetA_ZipCode()+"'," "'"+objDataRecord[i].GetA_MailBoxIn()+"'," "'"+objDataRecord[i].GetGroupIK()+"'," "'"+objDataRecord[i].GetPreelection()+"'," "'"+objDataRecord[i].GetPhone()+"'," "'"+objDataRecord[i].GetFaxPreelection()+"'," "'"+objDataRecord[i].GetFax()+"'," "'"+objDataRecord[i].GetMobil()+"'," "'"+objDataRecord[i].GetChangeService()+"'," "'"+objDataRecord[i].GetClassification()+"'," "'"+objDataRecord[i].GetState()+"'," "'"+objDataRecord[i].GetAdminDistrict()+"'," "'"+objDataRecord[i].GetKVArea()+"'," "'"+objDataRecord[i].GetKZVArea()+"'," "'"+objDataRecord[i].GetBankCountryKey()+"'," "'"+objDataRecord[i].GetBankCodeNum()+"'," "'"+objDataRecord[i].GetAccountNum()+"'," "'"+objDataRecord[i].GetBankName()+"'," "'"+objDataRecord[i].GetAccountHolder()+"'," "'"+objDataRecord[i].GetAccountNumIBAN()+"'," "'"+objDataRecord[i].GetBIC()+"'," "'"+objDataRecord[i].GetAccountHolderA()+"')"; cgFillIKV->Progress = (100/RecCount)*(i+1); dmDataInfo->qurIKV->SQL->Add(strSQL); dmDataInfo->qurIKV->ExecSQL(); dmDataInfo->qurIKV->SQL->Clear(); } cgFillIKV->Progress = 100; Label44->Font->Color = clBlue; frmHauptmenue->Label44->Visible = true; // Sprungmarke bei Fehlererkennung Fehler: delete [] objDataRecord; } //--------------------------------------------------------------------------- //########################################################################### //# Funktionsname: Nullen //# Eingabeparameter: AnsiString,Integer //# Rückgabeparameter: AnsiString //# //# Beschreibung: //# Diese Methode füllt Zahlen unter einer übergebenen Anzahl iLen an Zeichen mit //# Nullen auf. //# //# //########################################################################### [B]AnsiString TfrmHauptmenue::Nullen(AnsiString str, int iLen){[/B] (ZEILE 1439) AnsiString dummy; for (int i=0;i<(iLen-str.Length());i++){ dummy += "0"; } return dummy + str; } Zeile 1439 ist fett markiert. Hier nochmal ein Teil der Header-Datei: class TfrmHauptmenue : public TForm { __published: // Von der IDE verwaltete Komponenten TMainMenu *MainMenu1; TImageList *ImageList1; ..... ..... ..... private: AnsiString ZeichenWechsel(AnsiString); void DeleteRecord(String); void fill_dbgNum(); AnsiString Nullen(AnsiString, int); public: // Anwender-Deklarationen __fastcall TfrmHauptmenue(TComponent* Owner); __fastcall ~TfrmHauptmenue(); AnsiString GetBankCountryKey(); }; Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 Daraus kann man leider auch nicht viel mehr erkennen. Prüf doch bitte mal, ob in der Funktion darüber zu jeder öffnenden auch eine schließende geschweifte Klammer vorhanden ist. Oder stell die gesamte Funktion hier rein. Die langen Codesequenzen ohne Kontrollstrukturen kannst du ja rauslöschen. Zitieren
Kael_Uka Geschrieben 22. November 2007 Geschrieben 22. November 2007 Kann es sein, dass der Methodenkopf im .cpp fehlt? //############################################################################## //# Beschreibung: //# Speichern der ermittelten Daten in der Datenbank //# //# //############################################################################## cgFillIKV->Visible = true; cgFillIKV->Progress = 10; Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 Kann es sein, dass der Methodenkopf im .cpp fehlt? Keine Ahnung. Aus dem gezeigten Code geht ja nicht hervor, ob davor noch ein Methodenkopf steht. So ein Kommentar könnte ja auch mitten im Code stehen. Zitieren
Dannyboy Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Danke für die Hilfe. Also die Funktion ist echt megalang. Der ehemalige C++ Entwickler hier hat eine Funktion "Prozess" mit etlichen Kontrollstrukturen erzeugt. Die ganze Funktion geht über 1100 Zeilen Und darin musste ich einige Felder ergänzen sowie einige Kontrollstrukturen nochmals erweitern. Ich habe aber festgestellt das eine } wohl falsch gesetzt war, jetzt bekomm ich aber immer folgende Meldung: [Linker Fataler Fehler] Fatal: Unable to open file 'VERSIONINFO.LIB' Kann es sein das ich versehentlich eine Datei aus nem anderen Ordner gelöscht habe. Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 Kann es sein das ich versehentlich eine Datei aus nem anderen Ordner gelöscht habe.Das wäre eine Möglichkeit. Eine andere wäre, dass die Suchpfade des Linkers falsch eingestellt sind. Hast du denn eine solche Datei auf dem Rechner? Zitieren
Dannyboy Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Das wäre eine Möglichkeit. Eine andere wäre, dass die Suchpfade des Linkers falsch eingestellt sind. Hast du denn eine solche Datei auf dem Rechner? Also ich habe diese Datei nicht auf dem PC. Nun ist es so das ich seine Anwendung komplett in einem Ordner bekommen habe und über den Borland Builder dann natürlich die Project File öffne! Wo stelle ich denn die Suchpfade für den Linker ein? Dann wird da echt noch ein falscher Verweis sein. Denn wenn ich nämlich seine bisherige Anwendung öffne (habe ne alte Sicherung von ihm) und mir die Anwendung nochmals neu kompilieren lassen möchte (ohne eine Änderung), bekomme ich denselben Linker Fehler. BtW ich arbeite in Essen Edit: Ich habe in dem Projekt Ordner einen Unterordner "lib", in dem eine Datei "libsec.so" drin ist. Kann es sein das der Linker auf diese Datei angepasst werden muss? Weil eine VERSIONINFO.LIB habe ich nicht! Zitieren
Dannyboy Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Mist, kann meinen vorherigen Post nicht editieren. Also folgendes: Diese libsec.so Datei wird es auch nicht sein da das eine spezielle Datei von uns ist (Securityschicht - Java). Leider waren in seinem Ordner nämlich auch noch die alten Java Ordner drin und dieser lib Ordner gehörte zu Java. Bleibt nur die Frage wo man den Verweis zur VERSIONINFO.LIB findet. Vielleicht irgendwo im Quellcode versteckt? Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 Also ich habe diese Datei nicht auf dem PC.Dann bringt es auch nichts, an den Linkereinstellungen zu drehen. Wenn das Erstellen dieser Lib nicht Bestandteil des Projekts selbst ist, dann hat das Projekt eine Abhängigkeit, die in den Sicherungen, die du bekommen hast, nicht drin ist. Da kannst du gar nichts machen, außer diese Lib zu beschaffen. Soweit ich weiß, ist das keine Standard-Windows-Bibliothek. Es muss also eine Eigenentwicklung oder von einem Drittanbieter sein. Versuch doch mal, das Einbinden dieser Lib in den Linkereinstellungen abzuschalten. Das sollte zur Folge haben, dass der Linker sich über alle fehlenden Funktionen beklagt. Darüber kann man die Bibliothek möglicherweise besser identifizieren. Zitieren
Dannyboy Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Kann man eigentlich eine .exe-Datei auch wieder auseinanderpflücken? In der alten Version scheint da nämlich die VERSIONINFO.LIB enthalten zu sein! Ich vermute mal das uns der ehemalige C++ Entwickler vergessen hat, diese VERSIONINFO.LIB Datei mit in die Zip File zu packen (da wo auch der Projektordner ist) Und das wäre sehr schlecht ... @ Klotzkopp: Vielen Dank! Nur wo kann ich das denn in den Linkereinstellungen genau abschalten? Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 Kann man eigentlich eine .exe-Datei auch wieder auseinanderpflücken?Theoretisch manchmal, praktisch nicht. Nur wo kann ich das denn in den Linkereinstellungen genau abschalten?Dazu darfst du gerne in die Dokumentation des Builders schauen oder auf Hilfe von jemandem warten, der sich mit dem Builder besser auskennt als ich. So viele Linkereinstellungen kann es aber doch nicht geben, oder? Es kann übrigens auch sein, dass eine Direktive zum Einbinden der Lib irgendwo im Code steht. Such einfach mal im Code nach dem Dateinamen. Zitieren
Dannyboy Geschrieben 26. November 2007 Autor Geschrieben 26. November 2007 So, habe jetzt doch noch im Borland Builder in der Projekt xml-Datei ein paar Verweise zur "Versioninfo.lib" sowie generell zur "Versioninfo" gefunden. Habe diese Verweise bzw. Pfade einfach mal gelöscht und siehe da, es wird eine neue .exe-Datei erzeugt. Natürlich klappt jetzt die Versionsinfoanzeige nicht mehr; aber damit kann ich leben! Jetzt muss ich mich nur nochmal mit der Fachabteilung in Verbindung setzen damit diese mir die spezielle Testdatei erzeugt. Wieder etwas dazugelernt Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.