2017-08-25 8 views
1

Ich muss auf ein bestimmtes Element eines Vektors komplexer Daten in C++ zugreifen. HierFehler bei der Verwendung von komplexen Vektor

ist, was ich habe:

vector< complex<float> > x; // Create vector of complex numbers 
x.push_back(complex<float>(1, 2)); // Place 1 + j2 in vector 
x.push_back(complex<float>(2, 1)); // Place 2 + j1 in vector 

// Attempt at accessing the zero-th elements real part 
float temp1 = x.at(0).real; 
float temp2 = x[0].real; 

Dies gibt den folgenden Fehler in Visual Studio 2015:

Severity Code Beschreibung Projektdatei Zeilenunterdrückungszustand Fehler C3867 ‚std :: _ Complex_base: : real ': nicht standardisierte Syntax; Verwendung '&' ein Zeiger auf ein Element opencv_dft c zu erstellen: \ users \ josh \ VS_project \ main.cpp 101

+0

Verwenden Sie 'x [0] .real()' oder noch besser 'mit std :: real; ... real (x [0]) '. – alfC

Antwort

2

Sie haben vergessen, die Klammern in den Aufforderungen real(). Sie benötigen:

float temp1 = x.at(0).real(); 
float temp2 = x[0].real(); 

real() ist eine Elementfunktion, kein Datenelement.

+0

Wow, du hast recht! – user8919

0

Keine Notwendigkeit für Casting in der Anweisung x.push_back (komplex (float) {1, 2}) - obwohl tut nicht weh zu werfen. Vergessen Sie auch nicht, namespace std für Anweisungen zu verwenden, die vector und complex verwenden.

Auch nicht vergessen() s in x.at (0) .real so ist es x.at (0) .real() ;.

So schrieb ich ein Programm mit Vektoren und komplexen Zahlen.

#include <iostream> 
#include <complex> 
#include <vector> 

    using namespace std; 

    void main() { 
     complex<float> a = { 1,2 }; 
     a = { 1,4 }; 
     vector<complex<float>> av; 
     av.push_back({ 1,2 }); 
     cout << av.at(0).real(); 
    } 
+0

Sehr schön. Vielen Dank. – user8919

Verwandte Themen