Zum Inhalt springen

magicxxx

Mitglieder
  • Gesamte Inhalte

    14
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von magicxxx

  1. ok danke dir, wäre nett wenn du mir das dann erklärst wenn du bescheid weist
  2. Das ist der Code aus der vector.cpp datei auf das minimale gekürzt, da fehlt nur noch die Einbinding der Header Datei vector.h und wenn ich versuche aus denen Objektdatei zu generieren kommt der Fehler bei mir? Oder hab ich dich jetzt Falsch mit dem Beispiel verstanden? Edit: Hab vergessen #include "vector.h" in vector.cpp einzufügen
  3. ich kriege den Fehler, ausser dass da jetzt noch ein paar andere Fehler auftauchen, was ja normal ist. Hast du vielleicht irgendwelche Compiler Einstellungen gemacht?
  4. Ich hoffe das reicht, hier ist die Fkt aus der vector.cpp datei: vector::vector(const matrix& mat) { if(mat.cols()==1) // Spaltenvektor { n=mat.rows(); element=new double[n]; for(unsigned int i=0;i<n;i++) element[i]=mat[i][0]; } else if(mat.rows()==1) // Zeilenvektor { n=mat.cols(); element=new double[n]; for(unsigned int i=0;i<n;i++) element[i]=mat[0][i]; } else { std::cerr<<"In vector::vector(const matrix&) : illegal matrix size."<<std::endl; exit(1); } }[/PHP]
  5. ok das dauert dann
  6. Hmm irgendwie hat es jetzt geklapt mit einfügen Also ich habe versucht eine Objektdatei damit zu erzeugen, Hier erstmal der vector.cpp code #include <iostream> #include <fstream> #include <strstream> #include <cmath> #include "vector.h" #include "matrix.h" // Constructor: Dimension und Anfangswerte vorgebbar // l: Dimension des vectors // initval: Anfangswert vector::vector(const unsigned int l, const double initval) { n=l; element=new double[n]; for(unsigned int i=0;i<n;i++) element[i]=initval; } // Constructor: double-array dem vector zuweisen // l: Dimension des vectors // array: double-array, das dem vector zugewiesen werden soll vector::vector(const unsigned int l, const double array[]) { n=l; element=new double[n]; for(unsigned int i=0;i<n;i++) element[i]=array[i]; } vector::vector(const matrix& mat) { if(mat.cols()==1) // Spaltenvektor { n=mat.rows(); element=new double[n]; for(unsigned int i=0;i<n;i++) element[i]=mat[i][0]; } else if(mat.rows()==1) // Zeilenvektor { n=mat.cols(); element=new double[n]; for(unsigned int i=0;i<n;i++) element[i]=mat[0][i]; } else { std::cerr<<"In vector::vector(const matrix&) : illegal matrix size."<<std::endl; exit(1); } } // Elementzugriffs-Operator // i: Index des Elements double& vector::operator[](const unsigned int i) { // Zul?ssigkeit des Index ?berpr?fen if(i>=n) { std::cerr<<"In vector::operator[] : illegal index ("<<i<<")."<<std::endl; exit(1); } return element[i]; } // Elementzugriffs-Operator f?r konstantes Objekt // i: Index des Elements const double vector::operator[](const unsigned int i) const { // Zul?ssigkeit des Index ?berpr?fen if(i>=n) { std::cerr<<"In vector::operator[] : illegal index ("<<i<<")."<<std::endl; exit(1); } return element[i]; } // Neudimensionierung des vectors // l: neue Dimension des vectors // save: bisherigen Inhalt retten void vector::dim(const unsigned int l,const bool save) { if(l!=n) { vector v(l); if(save) { for(unsigned int i=0;i<((l<n)?l:n);i++) v.element[i]=element[i]; } *this=v; } } // alle Elemente auf einen Wert setzen // s: Wert void vector::set(const double s) { for(unsigned int i=0;i<n;i++) element[i]=s; } // Achseneinheitsvektor erzeugen // e: Index der Achse (0..(n-1)) void vector::axis(const unsigned int e) { if(e>=n) { std::cerr<<"In vector::axis : illegal index ("<<e<<")."<<std::endl; exit(1); } for(unsigned int i=0;i<n;i++) element[i]=0.0; element[e]=1.0; } // zwei Elemente vertauschen // e1: Index des ersten Elements // e2: Index des zweiten Elements void vector::exchange(const unsigned int e1,const unsigned int e2) { if((e1>=n) || (e2>=n)) { std::cerr<<"In vector::exchange : illegal index ("<<e1<<", "<<e2<<")."<<std::endl; exit(1); } double tmp=element[e1]; element[e1]=element[e2]; element[e2]=tmp; } // double an den vector anh?ngen // s: Wert des neuen Elements void vector::append(const double s) { dim(n+1); element[n-1]=s; } // vector an den vector anh?ngen // s: Wert des neuen Elements void vector::append(const vector& v) { dim(n+v.n); for(unsigned int i=1;i<=v.n;i++) element[n-i]=v.element[v.n-i]; } // double in den vector einf?gen // e: Index des Elements // s: Wert des neuen Elements void vector::insert(const unsigned int e,const double s) { dim(n+1); for(unsigned int i=n-1;i>e;i--) element[i]=element[i-1]; element[e]=s; } // Zuweisungs-Operator // v: vector, der zugewiesen werden soll vector& vector::operator=(const vector& v) { if(this!=&v) // Selbstzuweisung vermeiden { if(element) delete[] element; n=v.n; if(n!=0) // Wenn kein leerer Vektor { // elementweise kopieren element=new double[n]; for(unsigned int i=0;i<n;i++) element[i]=v.element[i]; } else element=0; } return *this; } // vector zum vector hinzuaddieren // v: vector, der hinzuaddiert werden soll vector& vector::operator+=(const vector& v) { if(n!=v.n) { std::cerr<<"In vector::operator+= : incompatible sizes."<<std::endl; exit(1); } for(unsigned int i=0;i<n;i++) element[i]+=v.element[i]; return *this; } // vector vom vector subtrahieren // v: vector, der subtrahiert werden soll vector& vector::operator-=(const vector& v) { if(n!=v.n) { std::cerr<<"In vector::operator-= : incompatible sizes."<<std::endl; exit(1); } for(unsigned int i=0;i<n;i++) element[i]-=v.element[i]; return *this; } // vector elementweise mit vector multiplizieren // v: vector, der elementweise multipliziert werden soll vector& vector::operator*=(const vector& v) { if(n!=v.n) { std::cerr<<"In vector::operator*= : incompatible sizes."<<std::endl; exit(1); } for(unsigned int i=0;i<n;i++) element[i]*=v.element[i]; return *this; } // vector elementweise durch vector dividieren // v: vector, durch den elementweise dividiert werden soll vector& vector::operator/=(const vector& v) { if(n!=v.n) { std::cerr<<"In vector::operator/= : incompatible sizes."<<std::endl; exit(1); } for(unsigned int i=0;i<n;i++) { if(v.element[i]==0) { std::cerr<<"In vector::operator/= : division by zero."<<std::endl; exit(1); } element[i]/=v.element[i]; } return *this; } // vector elementweise mit double multiplizieren // s: Wert, mit dem elementweise multipliziert werden soll vector& vector::operator*=(const double s) { for(unsigned int i=0;i<n;i++) element[i]*=s; return *this; } // vector elementweise durch double dividieren // s: Wert, durch den elementweise dividiert werden soll vector& vector::operator/=(const double s) { if(s==0) { std::cerr<<"In vector::operator/= : division by zero."<<std::endl; exit(1); } for(unsigned int i=0;i<n;i++) element[i]/=s; return *this; } // Vergleich auf Gleichheit // v1, v2: vectoren, die verglichen werden sollen bool operator==(const vector& v1,const vector& v2) { if(v1.n!=v2.n) return false; for (unsigned int i=0;i<v1.n;i++) if(v1[i]!=v2[i]) return false; return true; } // lexikographischer Vergleich // v1, v2: vectoren, die verglichen werden sollen bool operator<(const vector& v1,const vector& v2) { unsigned int i; for (i=0;i<v1.n;i++) if(v1[i]!=v2[i]) return (v1[i]<v2[i]); return false; } // lexikographischer Vergleich // v1, v2: vectoren, die verglichen werden sollen bool operator>(const vector& v1,const vector& v2) { unsigned int i; for (i=0;i<v1.n;i++) if(v1[i]!=v2[i]) return (v1[i]>v2[i]); return false; } // Vektoraddition // v1, v2: vectoren, die addiert werden sollen vector operator+(const vector& v1,const vector& v2) { if(v1.n!=v2.n) { std::cerr<<"In vector::operator+ : incompatible sizes."<<std::endl; exit(1); } vector v(v1); v+=v2; return v; } // Vektorsubtraktion // v1, v2: vectoren, die subtrahiert werden sollen vector operator-(const vector& v1,const vector& v2) { if(v1.n!=v2.n) { std::cerr<<"In vector::operator- : incompatible sizes."<<std::endl; exit(1); } vector v(v1); v-=v2; return v; } // double mit vector multiplizieren // s: Wert // v1: vector vector operator*(const double s,const vector& v1) { vector v(v1); v*=s; return v; } // vector mit double multiplizieren // v1: vector // s: Wert vector operator*(const vector& v1,const double s) { vector v(v1); v*=s; return v; } // vector durch double dividieren // v1: vector // s: Wert vector operator/(const vector& v1,const double s) { vector v(v1); v/=s; return v; } // Skalarprodukt // v1, v2: vectoren, die skalarmultipliziert werden sollen double operator*(const vector& v1,const vector& v2) { if(v1.n!=v2.n) { std::cerr<<"In vector::operator* : incompatible sizes."<<std::endl; exit(1); } double sp=0.0; for(unsigned int i=0;i<v1.n;i++) sp+=v1.element[i]*v2.element[i]; return sp; } // vectoren elementweise multiplizieren // v1,v2: vectoren, die elementweise multipliziert werden sollen vector product(const vector& v1,const vector& v2) { if(v1.n!=v2.n) { std::cerr<<"In vector::product : incompatible sizes."<<std::endl; // exit(1); } vector v(v1); v*=v2; return v; } // vectoren elementweise dividieren // v1,v2: vectoren, die elementweise dividiert werden sollen vector quotient(const vector& v1,const vector& v2) { if(v1.n!=v2.n) { std::cerr<<"In vector::quotient : incompatible sizes."<<std::endl; exit(1); } vector v(v1); v/=v2; return v; } // Ausgabe-Operator // v: vector, der ausgegeben werden soll std::ostream& operator<<(std::ostream& ostr, vector& v) { for(unsigned int i=0;i<v.n;i++) ostr<<v.element[i]<<' '; return ostr; } // Eingabe-Operator // v: vector, in den eingelesen werden soll std::istream& operator>>(std::istream& istr,vector& v) { for(unsigned int i=0;i<v.n;i++) istr>>v[i]; return istr; } std::istrstream& operator>>(std::istrstream& istr, vector& v) { for(unsigned int i=0;i<v.n;i++) istr>>v[i]; return istr; } // Compare-Funktion f?r qsort() int compare_PointWValue (const void *a, const void * { PointWValue *A = (PointWValue *) a; PointWValue *B = (PointWValue *) b; if (A->Value > B->Value) { return (1); } else { if (A->Value < B->Value) return (-1); else return (0); } } [/code] die Matrix Dateien brauchst du auch oder?
  7. Ich meine irgendwo gelesen zu haben, dass die friend forward deklaration bei den neuen Compilern nicht mehr gilt der .cpp code ist zu lang der passt hier nicht rein
  8. hmm sry für die Fehler, ich meine ich kompiliere die .cpp datei und class mit c hast schon recht, hab zu schnell getippt als gedacht. ich benutze den gcc 4.1.2 War das nicht so das dies jetzt nicht mehr gilt die forward deklaration?
  9. Hi, ich versuche diese header Darei zu kompilieren, hier ist der Teil Code davon: #ifndef _VECTOR_H_ #define _VECTOR_H_ // Klasse vector // // Mathematischer Vektor // - double-Elemente // - grundlegende Vektoroperationen class vector { friend class matrix; public: double* element; // double-Pointer zum internen speichern der Elemente unsigned int n; // Dimension des vectors vector() :element(0), n(0) {} // Standard-Constructor vector(const vector& v) :element(0) {*this=v;} // Copy-Constructor vector(const unsigned int l, const double initval=0.0); // Constructor: Dimension und Anfangswerte vorgebbar vector(const unsigned int, const double []); // Constructor: double-array dem vector zuweisen vector(const matrix& mat); // Constructor: matrix dem vector zuweisen ~vector() {if(element) delete[] element;} // Destructor [/PHP] jedoch kriege ich diese Fehlermeldung: ../../include/vector.h:21: error: expected ',' or '...' before '&'token Wenn ich jedoch die Zeile [PHP]klass matrix, vor dem klass vector einfüge ist die Fehlermeldung weg. Ich vestehe nicht wieso das so ist, die Klasse Matrix wurde doch schon in der Klasse Vector übergeben? oder?
  10. Ah ok, Danke. Bin ziemlich neu in C++
  11. Hi Ich hab beim kompilieren folgenden Fehler gekriegt, kann mir da jmd vielleicht weiter helfen? binary.h:18: error: extra qualification 'binary::' on member 'operator=' binary.h:19: error: extra qualification 'binary::' on member 'shift' binary.h:20: error: extra qualification 'binary::' on member 'exist' Dir Headerdatei binary.h sieht wie folgt aus : #ifndef _BINARY_H_H_ #define _BINARY_H_ class binary : public vector{ public: binary() {} // Standard-Constructor ~binary() {} // Destructor int binary_decimal(); binary decimal_binary(int d1); binary& operator+=(binary& v1); binary& operator-=(binary& v1); binary binary_inv(binary v1); binary twoscomplement(binary v1); binary& operator=(const binary& v); // Zuweisungs-Operator binary& binary::operator=(const vector& v); binary binary::shift(); bool binary::exist(); friend binary operator+(binary& v1,binary& v2); private: // vector v_binary; }; #endif und der dazugehörige Ausschnitt-Quellcode binary.cpp: binary& binary::operator=(const binary& v) { if(this!=&v) // Selbstzuweisung vermeiden { if(element) delete[] element; n=v.n; if(n!=0) // Wenn kein leerer Vektor { // elementweise kopieren element=new double[n]; for(unsigned int i=0;i<n;i++) element[i]=v.element[i]; } else element=0; } return *this; } binary& binary::operator=(const vector& v) { if(this!=&v) // Selbstzuweisung vermeiden { if(element) delete[] element; n=v.n; if(n!=0) // Wenn kein leerer Vektor { // elementweise kopieren element=new double[n]; for(unsigned int i=0;i<n;i++) element[i]=v.element[i]; } else element=0; } return *this; } binary binary::shift(){ bool exit = false; int i= 0; int deci = 0;; double check = 0.0; int dimension = dim(); binary result; do{ if (element[i] == 1){ for (int j=i; j<dim();j++){ check += element[j]; } check/=(j-i); if (check != 1){ deci = binary_decimal(); deci = deci + pow(2,i); result.decimal_binary(deci); if (result.dim() < dimension){ for (int k = result.dim(); k < dimension; k++){ result.insert(k,0); } } exit = true; } else{ for (int j = 0; j < dimension; j++){ result.insert(j,0); } exit = true; } } i++; }while(!exit); return result; } bool binary::exist(){ bool _exist = true; bool exit = false; double check = 0;; int sum = 0; for (int i = 0; i< dim();i++){ sum += element[i]; } if (sum == 0){ _exist = false; } i=0; do{ if (element[i] == 1){ for (int j=i; j<dim();j++){ check += element[j]; } check/=(j-i); if (check == 1){ _exist = false; } exit = true; } i++; }while(!exit); return _exist; } Woran könnte es liegen?
  12. Danke für die Hilfe. PS hab mich mit 'const verschrieben'
  13. du meinst einfach "friend bool operator == const(const stringc &x, const char *s); schreiben?
  14. Hi ich versuche gerade c++ dateien zu laufen zum kriegen, und hab folgenden Fehler: strings.h:44: error: ISO C++ forbids declaration of 'operator==' with no type strings.h:45: error: ISO C++ forbids declaration of 'operator==' with no type strings.h:46: error: ISO C++ forbids declaration of 'operator!=' with no type strings.h:47: error: ISO C++ forbids declaration of 'operator!=' with no type der ausgeschnittene code dazu sieht folgend aus: friend operator==(const stringc &x, const char *s); friend operator==(const stringc &x, const stringc &y); friend operator!=(const stringc &x, const char *s); friend operator!=(const stringc &x, const stringc &y); kann mir vielleicht jmd weiter helfen bitte?

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...