Kann erf, erff, etc. nicht finden beim Kompilieren mit 10.2
-
@DocShoe Das mache ich.... Danke für den Hinweis
-
@aekeller sagte in Kann erf, erff, etc. nicht finden beim Kompilieren mit 10.2:
@hustbaer Habe ich was falsch gemacht?
Zwei Dinge:
- Du hast keine Frage gestellt
- Du hast keine Code-Tags verwendet
-
Und vor allem auch: Keine 400 Zeilen Fehlermeldungen posten, von denen 380 sich ständig wiederholen! Da hat man als Leser doch spätestens nach 50 Zeilen keine Lust mehr. Siehe: https://www.c-plusplus.net/forum/topic/200753/du-brauchst-hilfe, besonders aus dem zweiten Teil:
Grundsätzlich solltest du immer die Fehlermeldung mit angeben, allerdings auch nur eine, nicht einen ganzen Haufen. Nach einem Fehler sind andere Fehlermeldungen häufig Folgefehler, auch wenn man das nicht auf den ersten Blick sieht. Versuche auf jeden Fall, die Meldung zu verstehen, um zu wissen, was zum Fehler gehört und was nicht.
-
-
^Ich habe nun meine Anfrage überarbeitet, nochmals verschiedene Dinge ausprobiert und bin einen kleinen Schritt weiter, aber noch nicht am Ziel. Ich hoffe, ich kriege nochmals ein Chance... Mein zusätzlichen Versuche sind all in der ursprüngelichen Anfrage dokumentiert.
-
Nach kurzem Blick in den Quelltext:
Es gibtstd::erf
im Standard, allerdings keinerff
underfl
. Möglicherweise sind das Microsoft-spezifische Erweiterungen, die nicht im Standard enthalten sind. Kommentier die beiden Zeilen (ab Zeile 1200) einfach aus// exprtk_define_erf( float,::erff) exprtk_define_erf( double,::erf ) // exprtk_define_erf(long double,::erfl)
-
Doch diese sollten alle im Standard sein: std::erf, std::erff, std::erfl
@aekeller: Schau mal in die
cmath
von deinem C++ Builder und suche mal nacherf
. Evtl. mußt du noch ein Makro dafür setzen.Kompilierst du denn mit C++11 (oder höher)?Edit: Laut How to set C++ language standard in C++ Builder unterstützt C++ Builder 10.2 C++11 automatisch und erst ab 10.3 gibt es Compileroptionen für die verschiedenen Sprachstandards.
-
// exprtk_define_erf( float,::erff) exprtk_define_erf( double,::erf ) // exprtk_define_erf(long double,::erfl)
Das habe ich gemacht.... nun bin ich einen Schritt weiter:
[ilink32 Error] Fatal: Exceeded memory limit for block Publics in module File2.cpp
Und File2.cpp enthält:
#pragma hdrstop #pragma argsused #ifdef _WIN32 #include <tchar.h> #else typedef char _TCHAR; #define _tmain ``` main #endif using namespace std; #include "exprtk.hpp" template <typename T> void trig_function() { typedef exprtk::symbol_table<T> symbol_table_t; typedef exprtk::expression<T> expression_t; typedef exprtk::parser<T> parser_t; // const std::string expression_string = "clamp(-1.0,sin(2 * pi * x) + cos(x / 2 * pi),+1.0)"; T x; symbol_table_t symbol_table; symbol_table.add_variable("x",x); symbol_table.add_constants(); expression_t expression; expression.register_symbol_table(symbol_table); parser_t parser; parser.compile(expression_string,expression); // for (x = T(-5); x <= T(+5); x += T(0.001)) { const T y = expression.value(); printf("%19.15f\t%19.15f\n", x, y); } } int _tmain(int argc, _TCHAR* argv[]) { trig_function<double>(); int result = 0; return result; }
-
Willkommen in der wunderbaren Embarcadero Welt ...
Guck mal hier, da steht beschrieben, wie man dem Linker mehr Speicher zuteilen kannPS:
Die Dinkumware STL Implementation ist wohl unvollständig, ich habe in xtgmath.h nur die Deklaration vonerf
underfc
gefunden. Ist mir bei ein paar anderen Funktionen aus cmath auch schon aufgefallen.
-
@DocShoe Vielen Dank für den Hinweis. Ich kann dem Linker mehr zuteilen. Doch es gibt keine Section für den "Block Publics".
-
Schade zu hören
Die Embarcadero Suite ist und bleibt halt ein Stümperprodukt.
-
@DocShoe sagte in Kann erf, erff, etc. nicht finden beim Kompilieren mit 10.2:
Schade zu hören
Die Embarcadero Suite ist und bleibt halt ein Stümperprodukt.Tja, würde mal sagen, die Ideen sind gut, die Umsetzung jedoch leider wirklich stümperhaft, die IDE ist grauenhaft instabil (und immer noch nur in 32 Bit) und funktioniert wohl nur richtig mit sehr kleinen Projekten, sobald es mehr Dateien werden, funktioniert kein Codecompletion etc.
Vermutlich haben einfach zu viele Entwickler daran gearbeitet, die nie lange geblieben sind.
Gibt ja auch das Sprichwort "Zu viele Köche verderben den Brei."
-
@Burkhi sagte in [Kann erf, erff, etc. nicht finden beim Kompilieren mit 10.2](/forum
Vermutlich haben einfach zu viele Entwickler daran gearbeitet, die nie lange geblieben sind.
Sowas macht den Code nicht besser, das ist klar. Ist aber nicht nötig. Die meisten Entwickler haben das auch ganz gut drauf Programme zu verkacken an denen sie schon lange arbeiten.
-
Ich hätte zum Problem übrigens noch die Idee das was du davon brauchst mit einem anderen compiler hinter eine DLL mit C Api zu verpacken und die dann einzubinden. Wär ne Krücke, aber wenigstens etwas.
Das wär jetzt meine "Quick and Dirty" idee.
Alternativ immernoch das von hand fixen.
-
@5cript Die Idee der C-DLL ist zwar schon etwas ein Krücke, aber ein Versuch wert. Danke!
-
@Burkhi Ich arbeite seit Version 5 mit BCB. Es gibt sicher immer etwas Besseres. Mit der Instabilität lernt man umgehen. Wir haben bei uns sogar den Spruch - wenn wir am Debuggen sind und BCB abkackt: "I am getting close to the bug, builder just crashed"... Und tatsächlich, schon oft war das Problem kurz danach gefunden.
Wir haben übrigens ein grosses und wunderbares Produkt bestehend aus 120 EXEs und DLLs und gut 3000 CPP-Dateien.