Typkonvertierung

Gast #5690064
Lesenswert?

Hallo,

ich habe ein Problem mit einer Konvertierung.
mein funktionierendes Beispiel sieht so aus:



1
typedef std::complex<double> Complex;
2
typedef std::valarray<Complex> CArray;
3

4
const Complex test[] = { 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0 };
5
CArray data(test, 8);

ich möchte nun gern Daten aus einem Array vom Typ int konvertieren, 
damit ich dynamische Daten hier verarbeiten kann.

Leider ist das Ergebnis immer 0:
1
int do_fft(int* daten,int points)
2
{
3
    Complex *f_arr;
4

5
    f_arr=(Complex*)malloc((points+1)*sizeof(Complex));
6
    if(f_arr==NULL)
7
      {
8
        cerr << "Kein Ram vorhanden"<<endl;
9
        exit(1);
10
      }
11
    int i=0;
12

13
    //Float Werte erzeugen
14

15
    for(i=0;i<points;i++)
16
    {
17
      *f_arr=*daten*1.0;
18
      f_arr++;
19
      daten++;
20
    }
21

22

23

24
    const Complex test[] = { 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0 };
25
    //CArray data(test, 8);
26
    //CArray data(*f_arr, points);
27
     CArray data((Complex*)daten, points);
28
}
Ich habe es mit allesn drei Varianten (Die letzten drei Zeilen im Code) 
getestet, es funktioniert nur mit den Konstanten.
Wäre nett wenn jemand hier helfen könnte.

Dank und Gruß Michael
#5690179
Lesenswert?

Ich versteh das Problem nicht? std::complex besitzt folgenden 
Konstruktur:
1
complex( const T& re = T(), const T& im = T() );

Das heißt
1
auto c = complex(42.0);

compiliert ohne dass man einen Imaginärteil angeben muss.

Und nachdem sich int impliziet nach double konvertieren lässt geht auch 
folgendes
1
auto c = complex(42);


Und damit lässt sich in Folge etwa copy_n nutzen und man landet bei 
einem Einzeler -> https://godbolt.org/z/4C_oky

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren