# komplexe Zahlen mit Visual C++ 6.0



## QuM (30. August 2005)

Hallo zusammen,
ich arbeite mit Visual C++ 6.0 und Borland C++ 5.0. Dabei programmiere ich die Oberfläche mit Menüs und grafischer Darstellung von Kurven mit Visual C, während die eigentliche Berechnung von Kurven mit Borland C programmiert ist. Das hat bisher Vorteile gehabt, weil die Berechnungen zum Teil längere Zeit in Anspruch nahmen, und ich von der Oberfäche aus nur das Rechenprogramm aufrufen musste. 
Jetzt möchte ich aber auch ein paar kleinere Berechnungen direkt im Hauptprogramm durchführen. Mein Problem: ich verwende komplexe Zahlen. Ich habe zwar im Verzeichnis VC98/Include von Visual C eine Datei Complex gefunden, die nach Klassendefinition für komplexe Zahlen und Arithmetik mit komplexen Zahlen aussieht, aber beim Einbinden mit #include <Complex> und den Deklarationen   complex a,b,c;  bzw. alternativ (in Anlehnung an Borland Builder) complex<double> a,b,c;  meldet der Compiler, dass der Typ von a,b,c nicht bekannt ist.
Was mache ich falsch? Habe ich eine Header-Datei übersehen? Muss die Deklaration anders aussehen? Oder gibt es keine komplexen Zahlen unter Visual C?


----------



## deepthroat (30. August 2005)

Hi.

Also eigentlich gibt es in der C++ Standard Bibliothek ein Template "complex" für komplexe Zahlen und folgendes sollte eigentlich mit jedem C++ Compiler funktionieren:
	
	
	



```
#include <complex>

std::complex<double> a = -1, b = sqrt(a);
```


----------



## QuM (31. August 2005)

Vielen Dank für die prompte Antwort!
Ich habe es auch auch ausprobiert, war aber nicht vollständig erfolgreich.
Durch #include <complex> und den Deklarationen std::complex<double> a,b,c; hat der Compiler immerhin schon erkannt, dass es sich um komplexe Zahlen handeln muss. Auch Zuweisungen der Form a = std::complex<double> (3.,-4.) hat er verstanden. Und offensichtlich gibt es keine Probleme mit den Grundrechenarten. Der Compiler meldet aber jetzt den Fehler, dass es keine Typ-Umwandlung gebe für das Argument einer mathematischen Funktion, wenn ich z.B. b = sin(a);  oder  b = sqrt(c); programmiere, wobei a,b,c vorher als complex<double> deklariert sind und ihnen Werte zugewiesen wurden. math.h habe ich eingebunden. Gibt es noch etwas, was ich beachten muss? Kennst du oder jemand aus der Community vielleicht diese Complex-Datei von Visual C++ 6.0?
Vielen Dank im Voraus für jede weitere Hilfe oder Anregung.


----------



## deepthroat (31. August 2005)

Hast du denn daran gedacht den Namensraum "std" zu benutzen?

Alle Klassen, Objekte und Funktionen, wie z.B. 
	
	
	



```
template<class T> complex<T> sin(const complex<T>&)
```
 der Standard C++ Bibliothek sind im Namensraum "std" definiert.

```
#include <complex>

std::complex<double> a;

// entweder Namensraum explizit angeben
std::sin (a); 

// oder: alle Elemente eines Namensraum in den globalen Namensraum einfügen
{ using namespace std;
  sin (a);
}

// oder: selektiv bestimmte Elemente eines Namensraums global verfügbar machen.
{ using std::sin;
  sin (a);
}
```


----------



## QuM (2. September 2005)

Hallo dt,
vielen Dank für den weiteren Tipp. Ich bin erst gestern Abend wieder zum Programmieren gekommen. Dein Hinweis mit dem namespace std war der entscheidende Hinweis. Jetzt funktioniert alles auch ohne std:: vorweg zu setzen. Ich habe auch einige Rechnungen von Hand nachgerechnet, mit übereinstimmenden Ergebnissen. 
Von Borland C++ 5.0 und vom Borland Builder (auf der Arbeitsstelle) war ich es nicht gewohnt, den namespace std zu verwenden (war nicht nötig).

Vielen Dank nochmal für die Hilfe!
QuM


----------

