12. november 2004 - 22:00
Der er
18 kommentarer og 1 løsning
Array af objekter
Nogen der kan vise mig hvad jeg gør galt? class xy { private: int hej; public: xy(int hej_x){hej=hej_x;} }; int main() { xy *nr = new xy[10]; return 0; } Fejlen jeg får er: no appropriate default constructor available Mvh AHR
Annonceindlæg fra SoftwareOne
12. november 2004 - 22:03
#1
Den mangler en constructor uden argumenter.
12. november 2004 - 22:04
#2
Jep. Men hvorfor?
12. november 2004 - 22:04
#3
class xy { private: int hej; public: xy() { }; // <------ xy(int hej_x){hej=hej_x;}; };
12. november 2004 - 22:05
#4
new xy[10] laver 10 styks xy'er ! Når den skal lave dem skal den bruge en constructor. Og da den ikke har noget argument skal den bruge en uden argument.
12. november 2004 - 22:08
#5
Du mener nok i virkeligheden: xy **nr = new (xy *)[10]; for(int i=0;i<10;i++) nr[i] = new xy(123); og så behøver du ikke en constructor uden argumenter.
12. november 2004 - 22:08
#6
Hvis jeg så ønsker et 2-dimensionelt array. Hvad gør jeg så? felt *nr = new felt[1][1]; virker ikke
12. november 2004 - 22:13
#7
græder :-) se nedenstående eksempel for gode ideer.
12. november 2004 - 22:13
#8
#include <iostream> #include <vector> using namespace std; int main() { // 2 D array int a1[3][3]; for(int i=0;i<3;i++) for(int j=0;j<3;j++) a1[i][j]=i*3+j+1; int *x1; x1 = a1[1]; for(int i=0;i<3;i++) cout << " " << x1[i]; cout << endl; // array af arrays int **a2 = new (int *)[3]; for(int i=0;i<3;i++) a2[i]=new int[3]; for(int i=0;i<3;i++) for(int j=0;j<3;j++) a2[i][j]=i*3+j+1; int *x2; x2 = a2[1]; for(int i=0;i<3;i++) cout << " " << x2[i]; cout << endl; // vector af vector vector< vector<int> > a3; vector<int> v[3]; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) v[i].push_back(i*3+j+1); a3.push_back(v[i]); } vector<int> x3 = a3[1]; for(int i=0;i<3;i++) cout << " " << x3[i]; cout << endl; return 0; }
12. november 2004 - 22:14
#9
#include <iostream> using namespace std; void init1(int *a,int n,int m) { for(int i=0; i<n; i++) for(int j=0; j<m; j++) a[i*m+j]=1; return; } void show1(int *a,int n,int m) { for(int i=0; i<n; i++) { for(int j=0; j<m; j++) cout << " " << a[i*m+j]; cout << endl; } return; } void init2(int **b,int n,int m) { for(int i=0; i<n; i++) for(int j=0; j<m; j++) b[i][j]=2; return; } void show2(int **b,int n,int m) { for(int i=0; i<n; i++) { for(int j=0; j<m; j++) cout << " " << b[i][j]; cout << endl; } return; } typedef int twodim[][3]; // <-------- fixed second dimension void init3(twodim c,int n,int m) { for(int i=0; i<n; i++) for(int j=0; j<m; j++) c[i][j]=3; return; } void show3(twodim c,int n,int m) { for(int i=0; i<n; i++) { for(int j=0; j<m; j++) cout << " " << c[i][j]; cout << endl; } return; } int main() { int n = 2; int m = 3; int *a = new int[n*m]; init1(a,n,m); show1(a,n,m); int **b = new (int *)[n]; for(int i=0; i<n; i++) b[i]=new int[m]; init2(b,n,m); show2(b,n,m); twodim *c = new twodim[2]; init3(*c,n,m); show3(*c,n,m); }
12. november 2004 - 22:15
#10
Det er nemt at lave et staisk 2D array. Men dynamisk må du vælge: - simulere 2D i 1D - array af arrays - vector af vector
12. november 2004 - 22:27
#11
Det jeg mente var, at du sagde jeg kunne gøre følgende. Ved godt det er med en tom konstruktør. class xy { private: int hej; public: xy(){} xy(int hej_x){hej=hej_x;} }; int main() { xy *nr = new xy[10]; return 0; } Men hvorfor kan jeg så ikke gøre det til et 2D array? class xy { private: int hej; public: xy(){} xy(int hej_x){hej=hej_x;} }; int main() { xy *nr = new xy[10][10]; return 0; }
12. november 2004 - 22:30
#12
Det kan man bare ikke i C++. Du kan sagtens i C# og Java. Men C++ er altså anderledes. (rent teknisk er der også nogle problemer med at få typer på højre og venstre side til at passe)
12. november 2004 - 23:05
#13
Vil det sige at hvis jeg skulle lave det på "din" måde, skulle jeg benytte 2 for-løkker. En til index af rækker og en til index a kolonner? Altså hvis jeg skal benytte et 2D array
12. november 2004 - 23:09
#14
Hvis du skal lave noget 2D skal du vel under alle omstændigheder have 2 for løkker uanset om det er: ægte 2D array, array af arrays, simuleret 2D Array i 1D array, eller vector af vector
12. november 2004 - 23:12
#15
Du har hjulet meget. Har fundet en løsning nu. Mange tak for hjælpen :-)
12. november 2004 - 23:14
#16
så ligger jeg et svar
13. november 2004 - 00:10
#17
En meget lille præcisering omkring det oprindelige spørgsmål: Når man erklærer objekter eller arrays af objekter skal der kaldes en constructor. I xy *nr = new xy[10]; kan det kun være default constructor, da der ikke er parametre med, som arnev siger. Men en anden løsning, end blot at definere en default constructor, kan også være at sætte parametre på, så en anden constructor kaldes, fx xy *nr = new xy[10](0); Den constructor du har, xy(int hej_x){hej=hej_x;}, vil så blive kaldt med parametren 0 for alle de 10 objekter i arrayet.
13. november 2004 - 00:26
#18
Tak begge. Her er hvad jeg ville lige fra starten. Men det er da muligt at koden ikke er optimal eller? class xy { private: int hej1; int hej2; public: xy(){} xy(int hej1_x,int hej2_x) { hej1=hej1_x; hej2=hej2_x; } }; int main() { xy *nr[2][2]; nr[0][0]=new xy(1,2); //Her skal så de andre objekter oprettes i arrayet return 0; }
13. november 2004 - 00:42
#19
Du kan også xy nr[2][2] = { { xy(1,2), xy(7,8) },{ xy(11,10), xy(12,14) } }; ;)
Kurser inden for grundlæggende programmering