Problem bei Zugriff auf struktur



  • Guten Tag !

    ich habe Problem beim Zugriff aufs globale Structur, das ich als globale structur deklariert und versuche mit dem Klassenmethode dizem() werte an die Structurelemente über STL Klassen zuweisen und ein Structurarray zubilden;
    aber ich krieg das nicht hin anscheined habe ich da ein synatax Fehler:
    hier ist ein Abschnitt vom Code:

    project.h

    struct XYpair{
      double x;
      double y;
    };
    
    class INPUT{
    
     private:
      int psize;
      std::vector<XYpair> dptr;
     public:
      std::vector<XYpair> Dezim(int psize);
    

    project.cpp

    std::vector<XYpair> INPUT::Dezim(int psize){
    
      double xr=0.01
      double X=0.0;
      int i;
      std::vector<XYpair> dptr;
      for(i=0; i<psize; i++){
        dptr.push_back(XYpair(X, i*X));
        X+=xr;
     }
      return dptr;
    }
    

    main.cpp

    int main(){
     int psize=10;
     std::vector<XYpair> V;
     INPUT Func;
    
    for(int i=0;i<psize;i++){
    
      cout <<"V.x"<< V[i].x <<"M.y"<< V[i].y <<'\n';
     }
    

    der Compiler meldet folgende fehler:

    g++ -c project.cpp
    project.cpp: In member function ‘std::vector<XYpair> INPUT::Dezim(int)’:
    project.cpp:36:33: error: no matching function for call to ‘XYpair::XYpair(double&, double)’
    project.cpp:36:33: note: candidates are:
    project.h:8:8: note: XYpair::XYpair()
    

    bin für jeder Hilfe sehr Dankbare

    Gruß
    Seb



  • Es fehlt ein Konstruktor:

    struct XYpair{
      double x;
      double y;
      XYpair( double x, double y ) : x(x), y(y) {} 
    };
    


  • Ein entsprechender Konstruktor ist natürlich eine Möglichkeit. Alternativ kann man ausnutzen, dass XYpair ohne Konstruktor ein Aggregat-Typ ist, den man so initialisieren kann:

    XYpais aggregat = {23,31416};
    soundso.push_back(aggregat);
    

    In C++11 darf man dann {} auch für temporäre Objekte verwenden, also:

    soundso.push_back(XYpair{23,31416});
    

    ohne dass man einen Konstruktor benötigt. Das habe ich nicht getestet, müsste aber passen.



  • Danke sehr Jungs
    es hat funktioniert; aber noch eine Frage soll ich die x und y in Konsructur initialisiern oder bräuche ich das nich wie ich gemacht habe und ja wie kann ich es machen

    das was ich in mein code zugefügt habe :

    project.h

    struct XYpair{
      double x;
      double y;
      XYpair(double x, double y):x(x),y(y){}
    };
    


  • x und y werden bereits initialisiert in dem gezeigten Code. Nämlich in der Initialisierungsliste.


Anmelden zum Antworten