Merkwürdiges Problem mit BCB6 und STL
-
Hallo,
ich habe noch nicht viel Erfahrung mit der Entwicklung im Borland C++ Builder und stehe jetzt vor einem merkwürdigen Problem.
Ich habe in einer meiner "Units" mit der vector Klasse gearbeitet, was zuerst auch super funktioniert hat. Doch irgendwann nach einer kleinen unbedeutenden Änderung (ich habe innerhalb der Parameter der AnsiString.sprintf() Methode etwas geändert) hat der BCB angefangen mich mit folgendem Fehler zu quälen.[C++ Fehler] new(46): E2316 'malloc' ist kein Element von 'std' [C++ Fehler] new(46): E2272 Bezeichner erwartet [C++ Fehler] testprojekt.cpp(28): E2451 Undefiniertes Symbol 'exception'Er verweißt dabei auf folgenden Code
#if defined (__BORLANDC__) && (__BORLANDC__ > 0x520) // new.h uses ::malloc ;( # include <cstdlib> using _STLP_VENDOR_CSTD::malloc; <<---------- #endifMit dieser Einfachen "Anwendung" konnte ich den Fehler reproduzieren:
Standard Forumlar:
//--------------------Header----------------- //--------------------------------------------------------------------------- #ifndef vtestH #define vtestH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include "search.h" //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *Button1; private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif //--------------------cpp----------------- //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "vtest.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------Unit:
//--------------------------------------------------------------------------- #ifndef searchH #define searchH //--------------------------------------------------------------------------- #include <vector> //--------------------------------------------------------------------------- class CSearch { void SearchR(char *path); void Search(char *path); }; //--------------------------------------------------------------------------- #endifSobald ich in dieser Datei "#inlcude <vector>" (oder string,...) schreibe bekomme ich den oben beschriebenen Fehler.
So, ich hoffe ihr könnt mir damit weiterhelfen und mir sagen was das Problem ist

-
Hallo,
Ich hatte das problem noch nicht. Schau mal nach. ob du alte und neue header mischst. Also evtl stdlib.h und cstdlib oder iostream.h und iostream. Man sollte grundsätzlich nur die neuen Header nehmen. Dann nimm mal alle evtl. vorhandenen using namespace std; Einträge aus deinem Programm. In den Headerdateien sollten ja sowieso keine sein.
-
Das was da oben zu sehen ist, ist alles was an Quellcode nötig ist um den Fehler zu erzeugen (bis auf die .cpp in der die main ist, die hab ich vergessen) aber soweit ich das sehe benutze ich da weder "using namespace std" noch alte Header.
Eben meinte jemand es könnte daran liegen das ich neben Borland auch VC 2005 Express Installiert habe und sich dadurch vielleicht die STL Header geändert haben ? Kann das angehen ?
(Wobei es ja schon compiliert und funktioniert hat ...)
-
Das kann eigentlich nichts mit VC++ zu tun haben, da beide Compiler die Standardheader von verschiedenen Positionen holen (ist bei jedem Compiler so). Selbst bei verschiedenen Builderversionen ist das so (sind ja auch verschiedene STL-Implementationen).
Bei mir geht dein Code. Was ist eigentlich "vtest.h" ?
Schau dir auch mal die Include-Pfade in den Projekteinstellungen an und lösche da alle, die du nicht unbedingt brauchst. Vielleicht holt sich der Builder ja eine Headerdatei von einer falschen Stelle.
-
Ich habe Header und Cpp Datei zusammen gepostet ... dementsprechend ist der obere Teil die Datei "vtest.h" und der untere die "vtest.cpp" ...
Verzeichnisse:
Includes: (BCB)\\include;(BCB)\include\vcl
Bibliotheken: (BCB)\\lib\\obj;(BCB)\libIch glaub bei mir ist irgendwas kaput gegangen

Hab den Builder zwischenzeitlich auch schonmal neu Installiert... hat aber nicht geholfen...