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 machendas 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.