Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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.

Geschrieben

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();

};

Geschrieben

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.

Geschrieben

Kann es sein, dass der Methodenkopf im .cpp fehlt?

//##############################################################################

//# Beschreibung:

//# Speichern der ermittelten Daten in der Datenbank

//#

//#

//##############################################################################

cgFillIKV->Visible = true;

cgFillIKV->Progress = 10;

Geschrieben

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.

Geschrieben
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?

Geschrieben
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!

Geschrieben

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?

Geschrieben
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.

Geschrieben

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?

Geschrieben
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.

Geschrieben

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 :D

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...