static object
-
außerhalb der klassendefinition, also so:
class M { public: M() {} static void set(int a, int b); private: static int a_; static int b_; }; int M::a_(0); int M::b_(0); //...
mfg
-
soll ich euch eine explizite Beispiel geben weil ich erhalte hir vor allem zu dem letzten vorschlag eine fehlermeldung
staticfunktions.cpp syntax error before `::' token
das Programm was ich geschrieben habe ist ewig lang aber da ich mit Matrizen meine Object irentierte wissen gesammelt hab ich eine klein beispiel vorbereitet.
#include<iostream>
using namespace std;class matrix
{
private:
static int zei;
static int spal;
static int **A;
public:
matrix();
static void set(int a,int b);
friend istream& operator>>(istream& is,matrix& s);
friend ostream& operator<<(ostream& is,matrix& s);
bool operator =(matrix m);};
void matrix::set(int a,int b)
{
zei=a;
spal=b;
}
matrix::matrix()
{
int i,j;A=new int*[zei];
for (i=0;i<zei;i++)
{
A[i]=new int[spal];
}}
istream& operator>>(istream& is,matrix& m)
{
int i,j;
for(i=0;i<m.zei;i++)
{
for(j=0;j<m.spal;j++)
{
cout<<"Bitte geben Sie das A["<<i<<"]["<<j<<"]="<<endl;
is>>m.A[i][j];
}
cout<<endl;
}
return is;
}
ostream& operator<<(ostream& os,matrix& k)
{
int i,j;
for(i=0;i<k.zei;i++)
{
for(j=0;j<k.spal;j++)
{
os<<k.A[i][j];
}
cout<<endl;
}
return os;
}
bool matrix:: operator =(matrix m)
{
if(this->zei<m.zei)
{return true;
}
else
{
return false;
}
}
int main()
{
int m,l,h,n;
cout<<"BITTE B"<<endl;
cin>>m;
cin>>l;
matrix::set(m,l);
matrix B;
cin>>B;
cout<<B;
cout<<"BITTE C"<<endl;
cin>>h;
cin>>n;
matrix C;
cin>>C;
cout<<C<<endl;
cout<<"Diemnsion vergleich"<<B.operator =(C)<<endl;
return 0;
}
-
bezweifle ich.
//edit das gin richtung terraner
-
otze schrieb:
bezweifle ich.
//edit das gin richtung terraner
wie jetzt? ist das falsch/"nicht standardkonform"?
wenn du meinst, dass die initialisierung in die <class>.cpp gehört, stimme ich dir zu.macht doch mal ganze sätze, menschenskinder!
mfg
-
@Xion: bitte benutze code tags ([ cpp]dein_code[ /cpp](ohne die Leerzeichen))
Also, es ist genau das angesprochene Problem:class foo{static int bar;};
ist nur eine deklaration. Du musst bar auch definieren, etwa so:
int foo::bar=3;
Aber in einer Objektdatei (.cpp), wenns kein template is...
In die cpp datei musst du die .h auch inkludieren.
-
wenn du meinst, dass die initialisierung in die <class>.cpp gehört, stimme ich dir zu.
dann packs sie da auch rein
bei deiner darstellung besteht nämlich eine verwechslungsgefahr mit static templateobjekten, da diese nämlich wirklich in die header kommen müssen
-
Ja ok ich hab fehler offensichtlich. aber ich hab euch jetzt doch eine Beispiel gegeben kann das jemand koregieren und Kompalieren wenn keine fehler da sind dann bitte den koregierten code Posten, da es mir nicht viel zeit bleibt.Ich muss Morgen meine Studienarbeit abgeben ich wäre euch sehr dankbar.
-
Ich hab die Antwort doch schon geschrieben: in die .cpp Datei:
int matrix::zei=0; int matrix::spal=0; int ** matrix::A=0;
/edit: ich glaube nicht, dass {du mit dem Ton weit kommst, dir jemand deine Hausaufgaben macht}.
-
terraner schrieb:
finix schrieb:
terraner schrieb:
du kannst die static member so initialisieren:
int M::a(0); int M::b = 1; // edit: ohne static
Echt? Seit wann den das? Kleiner Tip(p), a & b sind non-const
ich kann den fehler nicht nachvollziehen - bei mir kompiliert es (gcc-3.4.2) und hier z.b. steht dasselbe.
mfg
hehe.. meinte deinen ursprünglichen Code - dachte du wolltest das direkt in die Klassendefinition packen. So hätte er halt wegen dem static gemeckert
Xion schrieb:
Ich muss Morgen meine Studienarbeit abgeben ich wäre euch sehr dankbar.
Ich hoffe das Thema geht nicht tiefer als "Die Erstellung einer kompilierbaren Matrixklasse"
Und mach nicht so'n fieses Gesicht, in dem Ton Forderungen stellen kommt bei den meisten gar nicht gut an.
-
Hallo Ness und Finix
Ich wiess es nicht wie ich euch erklären soll erstens mach ich hier keine Sprucüche zweitens die hier ist nur eine Beispiel zweitens Thema meine studienarbeit ist erstens Hardware in Loop zweitens das hier ist nur eine zusatz.Ok Finix von wegen ist das deine Studien Arbeit du bist der jenige der cool absprüche hierKlopft nicht
ich. Leute Leute Leute was ihr alles falsh versteht jetzt bleibt mal cool wenn ihr lust habt dann helft wenn nicht dann ist auch nicht schlimm, eine kleine Problem das kann ich eine andres mal programmieren.Also Leute Egal das was ich gegeben hab
ist nicht das was ist abgeben werde sondern nur eine ähnlich Problem. Danke
-
Finix hab keine angst du machst nicht meine studienarbeit eine Matrix Programmieren ist kann keine studiearbeit sein wenn du sowas gemacht hast wie tool für dich.Also junge keine _Zeit zum streiten und keine Lust.
-
Xion schrieb:
Hallo Ness und Finix
Ich wiess es nicht wie ich euch erklären soll erstens mach ich hier keine Sprucüche zweitens die hier ist nur eine Beispiel zweitens Thema meine studienarbeit ist erstens Hardware in Loop zweitens das hier ist nur eine zusatz.Ok Finix von wegen ist das deine Studien Arbeit du bist der jenige der cool absprüche hierKlopft nicht
ich. Leute Leute Leute was ihr alles falsh versteht jetzt bleibt mal cool wenn ihr lust habt dann helft wenn nicht dann ist auch nicht schlimm, eine kleine Problem das kann ich eine andres mal programmieren.Also Leute Egal das was ich gegeben hab
ist nicht das was ist abgeben werde sondern nur eine ähnlich Problem. Danke
-
Ich bedanke mich bei euch allen sorry die mich falsh verstanden haben eine sehr schöne benutzerfreundlich Oberfläche ist jetzt enstanden i am verry happy die Tipps von ness waren sehr hilfreich. Ich bedanke mich bye. Ausserdem meine Betreuer sitzt neben mir also ich hab nicht geschummelt wie manche hier behauptet haben.