M_PI..... Fehlerhaftes Programm
-
also:
#include "stdafx.h" #include <iostream> #define _USE_MATH_DEFINES #include <cmath>
ich sags glei.. so funktioniert es auch nicht
-
Die Standardheader dürfen sich gegenseitig einbinden, und ich vermute, dass das hier indirekt entweder durch <iostream> oder durch etwas in stdafx.h geschehen ist. In diesem Fall verhindern mit ziemlicher Sicherheit die Include-Guards in math.h, dass math.h nach der Definition des Makros erneut ausgewertet wird.
Schreib die Makrodefinition halt ganz nach oben.
-
Oder ganz klassisch und immer* funktionierend:
#ifndef M_PI #define M_PI 3.1415926535897932 #endif
*: Außer irgendein Scherzvogel macht vorher
#define M_PI 3.00
.
-
@seldon
gesagt getan... es und noch mehr probleme:
Warnung 1 warning C4627: "#include <cmath>": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.
Warnung 2 warning C4603: "_USE_MATH_DEFINES": Das Makro ist nicht definiert, oder die Definition wurde nach Verwendung des vorkompilierten Headers geändert.
Fehler 3 error C2065: 'M_PI': nichtdeklarierter Bezeichner
-
Zeig mal her, was du jetzt hast.
-
he das funktioniert
noch was was nicht ganz hinneinpasst.. habe zwar angefangen.. kenne mich einn bissel mit funktionen und schleifen aus.. zeiger auch bekannt...
aber kannste mal etwas empfelen für anfänger die dann auch weitergeht nach der consolenanwendungen
aber ich glaube ich brauche auch was für consolen anwendungen da ich sicher nciht durch bin..
-
Jesse schrieb:
@seldon
gesagt getan... es und noch mehr probleme:
Warnung 1 warning C4627: "#include <cmath>": Wird bei der Suche nach Verwendung des vorkompilierten Headers übersprungen.
Warnung 2 warning C4603: "_USE_MATH_DEFINES": Das Makro ist nicht definiert, oder die Definition wurde nach Verwendung des vorkompilierten Headers geändert.
Fehler 3 error C2065: 'M_PI': nichtdeklarierter Bezeichner
Na, steht doch recht direkt da: Wenn du die vorkompilierten Header benutzt ("stdafx.h"), dann werden weitere Einbindungen der Header ignoriert. Dadurch wird niemals das Symbol definiert, da es bei der Erstellung der vorkompilierten Header nicht existierte. Meine Empfehlung: Lass als Anfänger die vorkompilierten Header ganz weg. Bis deine Projekte so groß werden, dass du einen Unterschied merkst, werden noch Jahre vergehen. Andererseits sparst du dir Unannehmlichkeiten wie diese, wenn du sie nicht benutzt.
Jesse schrieb:
noch was was nicht ganz hinneinpasst.. habe zwar angefangen.. kenne mich einn bissel mit funktionen und schleifen aus.. zeiger auch bekannt...
aber kannste mal etwas empfelen für anfänger die dann auch weitergeht nach der consolenanwendungen
aber ich glaube ich brauche auch was für consolen anwendungen da ich sicher nciht durch bin..
Ich verstehe diese Sätze nicht, aufgrund ihrer sprachlichen Mängel.
-
SeppJ schrieb:
Ich verstehe diese Sätze nicht, aufgrund ihrer sprachlichen Mängel.
Noch etwas, was nicht ganz dazupasst.. ich habe zwar angefangen, kenne mich auch ein bisschen mit Funktionen, Schleifen und Zeigern aus, aber könntest du mir mal etwas für Anfänger empfelen, das auch weitergeht nach den Konsolenanwendungen. Ich glaube, dass ich auch ein wenig Hilfe, bzw. ein Tutorial (spezifisch) für Konsolenanwendungen brauche, da ich sicher noch nicht durch bin..
-
Hacker schrieb:
SeppJ schrieb:
Ich verstehe diese Sätze nicht, aufgrund ihrer sprachlichen Mängel.
Noch etwas, was nicht ganz dazupasst.. ich habe zwar angefangen, kenne mich auch ein bisschen mit Funktionen, Schleifen und Zeigern aus, aber könntest du mir mal etwas für Anfänger empfelen, das auch weitergeht nach den Konsolenanwendungen. Ich glaube, dass ich auch ein wenig Hilfe, bzw. ein Tutorial (spezifisch) für Konsolenanwendungen brauche, da ich sicher noch nicht durch bin..
Dann die Antwort an Jesse: Das ist nix. Funktionen, Schleifen und Zeiger ist vielleicht gerade mal genug, um eine C-Bibliothek so halbwegs zu benutzen. So wie du schreibst, kennst du kein einziges der Konzepte die C++ von C abheben. Wenn du über die Konsole hinaus willst, wirst du Bibliotheken benutzen müssen. Wenn diese Bibliotheken für C++ gemacht sind (Es gibt auch welche für C, damit solltest du zurecht kommen, wenn das stimmt, was du sagst. Aber das wird unnötig umständlich), dann werden sie viele dieser Sprachmittel benutzen, die dir gänzlich unbekannt sind. Du scheinst nicht einmal die Standardbibliothek von C++ zu kennen (die diese Konzepte in Teilen auch sehr stark nutzt).
-
Du kannst Dir pi auch einfach mit
double const PI = std::acos(-1.)
vom Compiler ausrechnen lassen. Sind die trigonometrischen Funktionen in C++11 eigentlichconstexpr
?
-
Tachyon schrieb:
Du kannst Dir pi auch einfach mit
double const PI = std::acos(-1.)
vom Compiler ausrechnen lassen. Sind die trigonometrischen Funktionen in C++11 eigentlichconstexpr
?Keine Ahnung zu der formalen Regelung in C++11, aber normalerweise setzen Compiler die trigonometrischen Funktionen direkt ein, wenn der Ausdruck konstant ist. Du wirst feststellen, dass man in der Regel nicht die Mathe-Bibliothek mitlinken muss (in C++ sowieso nicht, ich meine C-Compiler), wenn die Ausdrücke alle konstant sind.
-
Tachyon schrieb:
Du kannst Dir pi auch einfach mit
double const PI = std::acos(-1.)
vom Compiler ausrechnen lassen. Sind die trigonometrischen Funktionen in C++11 eigentlichconstexpr
?Wieso? IMO wären da Makros besser aufgehoben...
-
Hacker schrieb:
Wieso? IMO wären da Makros besser aufgehoben...
Was siehst du denn als Vorteil eines Makros?
-
Edit ^4:
Ne, lieber Funktionen und constexpr. Makros sind nicht schneller.
-
Hacker schrieb:
Edit: Ah, ihr meint Funktionen! Da muss ich kurz nachdenken, aber da isses natürlich was anderes
In allen Fällen wären Makros keine gute Wahl gewesen...
-
gfhfgh schrieb:
Hacker schrieb:
Edit: Ah, ihr meint Funktionen! Da muss ich kurz nachdenken, aber da isses natürlich was anderes
In allen Fällen wären Makros keine gute Wahl gewesen...
Stimmt, die sind ja auch nich typsicher, nicht?
-
Tachyon schrieb:
Du kannst Dir pi auch einfach mit
double const PI = std::acos(-1.)
vom Compiler ausrechnen lassen. Sind die trigonometrischen Funktionen in C++11 eigentlichconstexpr
?Eine explizite Aussage dazu kann ichnicht zu finden. Allerdings scheint es zumindest erlaubt zu sein, beispielsweise ist in 26.8/9 nur von Signaturen die Rede und constexpr ist nicht Teil der Signatur (der Rückgabetyp allerdings auch nicht).
-
Hacker schrieb:
gfhfgh schrieb:
Hacker schrieb:
Edit: Ah, ihr meint Funktionen! Da muss ich kurz nachdenken, aber da isses natürlich was anderes
In allen Fällen wären Makros keine gute Wahl gewesen...
Stimmt, die sind ja auch nich typsicher, nicht?
Das ist fast schon das geringste Problem. Schau dich einfach mal bei Google um. Es gibt genug Beispiele, wo Makros Bugs erzeugen, die man nur schwer findet.
Fängt schon bei Kleinigkeiten wie z.B. MY_MACRO(++i); an.
-
Wie kann eine trigonometrische Funktion constexpr sein, wenn sie einen berechnetes Objekt zurückgibt?
-
Hacker schrieb:
Wie kann eine trigonometrische Funktion constexpr sein, wenn sie einen berechnetes Objekt zurückgibt?
Wenn die Funktion bei gleichem Argument immer das gleiche zurück gibt und auch sonst keine Seiteneffekte hat, ist das erlaubt. Das ist sogar eigentlich der ganze Witz an constexpr.