01 class Flugzeug {
02 private:
03 const unsigned int nr;
04 unsigned int sitze;
05 static int serienNr;
06 public:
07 Flugzeug(unsigned int sitze);
08 static int getSerienNr();
09 };
10
11 static int serienNr = 4700;
12
13 Flugzeug::Flugzeug(unsigned int sitze) {
14
15 this->sitze = sitze;
16 }
17 static int getSerienNr(){
18 return serienNr++;
19 }
我们必须初始化会员" nr"。 如果我把
14 this->nr = serienNr++;
它告诉我:
13 error: uninitialized member 'Flugzeug::nr' with 'const' type 'const unsigned int'
14 error: assignment of read-only member 'Flugzeug::nr'
好的,我必须在初始化列表中初始化它? 所以我把
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(serienNr++) {
它会告诉我:
13 undefined reference to 'Flugzeug::serienNr'
我尝试了所有这些:
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(serienNr++) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(getSerienNr()) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(Flugzeug::serienNr) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(Flugzeug->serienNr) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(Flugzeug.serienNr) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(this::serienNr) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(this->serienNr) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(this.serienNr) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(Flugzeug::getSerienNr()) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(Flugzeug->getSerienNr()) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(Flugzeug.getSerienNr()) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(this::getSerienNr()) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(this->getSerienNr()) {
13 Flugzeug::Flugzeug(unsigned int sitze) : nr(this.getSerienNr()) {
如何使用静态成员或静态函数初始化const成员?
谢谢 - Enomine
答案 0 :(得分:0)
解决方案:
#include <iostream>
#include <cstring>
using namespace std;
class Flugzeug
{
private:
const unsigned int nr;
char *typ;
unsigned int sitze;
static int serienNr;
public:
Flugzeug(const char *typ, unsigned int sitze);
Flugzeug(Flugzeug const &other);
~Flugzeug();
Flugzeug &operator=(Flugzeug const &other);
unsigned int getNr() const;
void setTyp(char const *t);
char *getTyp() const;
void setSitze(unsigned int sitze);
unsigned int getSitze() const;
bool operator==(Flugzeug const &other);
bool operator<(Flugzeug const &other);
static int getSerienNr();
};
int Flugzeug::serienNr = 4700;
char *strdupnew(char const *str)
{
return strcpy(new char [strlen(str)+1], str);
}
Flugzeug::Flugzeug(const char *typ, unsigned int sitze) : nr(serienNr++){
this->typ = strdupnew(typ);
this->sitze = sitze;
}
Flugzeug::Flugzeug(Flugzeug const &other) : nr(serienNr++){
this->typ = other.getTyp();
this->sitze = other.getSitze();
}
Flugzeug::~Flugzeug(){
delete typ;
}
Flugzeug &Flugzeug::operator=(Flugzeug const &other) {
this->typ = other.getTyp();
this->sitze = other.getSitze();
return *this;
}
unsigned int Flugzeug::getNr() const{
return nr;
}
void Flugzeug::setTyp(char const *t){
this->typ = strdupnew(t);
}
char *Flugzeug::getTyp() const{
return typ;
}
void Flugzeug::setSitze(unsigned int sitze){
this->sitze = sitze;
}
unsigned int Flugzeug::getSitze() const{
return sitze;
}
bool Flugzeug::operator==(Flugzeug const &other){
return sitze == other.getSitze();
}
bool Flugzeug::operator<(Flugzeug const &other){
return sitze < other.getSitze();
}
ostream& operator<<(ostream &out, Flugzeug const &f) {
out << "Nr: " << f.getNr() << endl;
out << "Typ: " << f.getTyp() << endl;
out << "Sitze: " << f.getSitze() << endl;
out << "SNr: " << f.getSerienNr() << endl;
return out;
}
int Flugzeug::getSerienNr(){
return serienNr;
}