static object
-
ok Leute ich hab eine Problem und zwar folgendes.
nehmen wir an.
class m{
private:
static int a;
static int b;
public:
m();
static void set(int,int);
}
Also ich will erst die Klassenvariable a und b initialisieren nämlich mit der kalssenmethode void set(int,int)und dann objekte mit den gleichen parameter erzegen.
z.b
void m::set(int l,int c)
{
a=l;
b=c;
}
m::m()
{
jetzt hioer objekt erzeugen.
}
int main ()
{
int g,h;
cin>>g;
cin>>h;
m::set(g,h);
m d();
}
ok das musste reichen das geht jedoch nicht da der kompiler streict. wo kann das liegen?
danke Xion
-
du kannst die static member so initialisieren:
int M::a(0); int M::b = 1; // edit: ohne static
der code funktioniert nicht, weil static methoden kein objekt benötigen, um verfügbar zu sein, das heißt du musst weiterhin M m; verwenden, um ein benutzbares objekt zu erhalten.
mfg
edit2: muahaha! erster!
-
wie wärs mit m::a oder m::b?
oder ner fehlermeldung?
"funzt nicht ist keine ausreichende fehlerbeschreibung"
-
Du kannst sie mittels deiner Methode (as in Klassenmethode) ändern aber nicht initialisieren.
Einfach mal
int m::a; int m::b;
in die .cpp stecken & am besten mit sinnvollen Werten initialisieren.
-
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
terraner schrieb:
edit2: muahaha! erster!
Jo, dafür kompiliert's nich, setzen, 6
-
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
-
wo soll ich eure Meinung nach
int M::a(0);
int M::b = 1;
diese hier stecken in void set?
wo genau.es würde mir helefen wenn irgend jemand von euch auf meine denk fehler genau hinweissen.
-
das gehört irgendwo in ne *.cpp (in keine funktion)
-
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