C++ Richtlinien Problem

Oetzicool

Erfahrenes Mitglied
Hey Leute ich habe ein Programm geschrieben in c++ unter linux, es ist ein einfaches programm welches zahlen einliest und wieder ausgibt...also basics nun soll ich es mittels -Weffc++ -Wold-style-cast beim übersetzen auf die C++ Richtlinien überprüfen. Nun bekomme ich die Meldung:
Warnung: ausgabe::counter sollte in ElementinitialisierungsListe initialisiert werden
das hab ich dann so geschrieben

Code:
//ausgabe.cpp
ausgabe::ausgabe():feld(new int[3]),counter(new int())
{
}
// ausgabe.h
class ausgabe
{
...
private:
int * counter;
int* feld;
}
Nun spuckt er mir aber ne warnung aus das die schon im header initialisiert werden...könnt ihr mir da weiterhelfen? Danke schonmal!

Cu Oetzicoo :)
 
Hi.

Wie lautet die Fehlermeldung genau?

Gruß

\edit: ein bißchen mehr Code wär auch nicht schlecht - wird ja dann nicht soviel sein...
 
Zuletzt bearbeitet:
also hier ist mal die ausgabe:
ausgabe.h: In constructor »ausgabe::ausgabe()«:
ausgabe.h:25: Warnung: »ausgabe::feld« wird initialisiert nach
ausgabe.h:24: Warnung: »int* ausgabe::counter«
ausgabe.cpp:15: Warnung: während es hier initialisiert wurde
ausgabe.cpp: In copy constructor »ausgabe::ausgabe(const ausgabe&)«:
ausgabe.cpp:24: Warnung: »ausgabe::counter« sollte in Elementinitialisierungsliste initialisiert werden
ausgabe.cpp:24: Warnung: »ausgabe::feld« sollte in Elementinitialisierungsliste initialisiert werden

und hier mal die zwei dateien:
ausgabe.cpp
Code:
#include "ausgabe.h"

#include <iostream>

const char *rcsid = "$Name: Release-finish $";
using namespace std;

ausgabe::ausgabe():feld(new int[3]),counter(new int())
{
}
ausgabe::~ausgabe()
{
    delete[] feld;
    delete counter;
}

ausgabe::ausgabe(const ausgabe& a)
{
    feld = new int[3];
    counter = new int();
    
    for(int i=0;i>3;i++)
    {
	feld[i] = a.feld[i];
    }
    
    counter = a.counter;
}
ausgabe & ausgabe::operator=( const ausgabe & a)
{

} 
void ausgabe::insert(int i)
{
    if (*counter < 3)
    {
        feld[*counter] = i;
    }
    *counter += 1;
}

int ausgabe::getAnzahl()
{
    return *counter;
}

void ausgabe::print()
{
    for (int j = 0; j < *counter; j ++)
    {
        cout << feld[j] << endl;
    }
    cout << "Eintraege insgesamt: " << *counter << endl;
}

und hier die ausgabe.h
Code:
//
// $Id: ausgabe.h,v 1.2 2008/11/27 00:26:30 padatko Exp $
// $Author: padatko $
// $Date: 2008/11/27 00:26:30 $
// $Revision: 1.2 $
//

#ifndef AUSGABE_H
#define AUSGABE_H

#include <iostream>

class ausgabe
{
public:
    ausgabe();
    ~ausgabe();
    ausgabe(const ausgabe &);
    ausgabe& operator=(const ausgabe&);
    void insert(int i);
    int getAnzahl();
    void print();
private:
    int* counter;
    int* feld;
};

#endif
 
ausgabe.h: In constructor »ausgabe::ausgabe()«:
ausgabe.h:25: Warnung: »ausgabe::feld« wird initialisiert nach
ausgabe.h:24: Warnung: »int* ausgabe::counter«


-->
einfach:
C:
ausgabe::ausgabe(): counter(new int()), feld(new int[3])
{
...
}
 
Zuletzt bearbeitet:
Hi.
also hier ist mal die ausgabe:
ausgabe.h: In constructor »ausgabe::ausgabe()«:
ausgabe.h:25: Warnung: »ausgabe::feld« wird initialisiert nach
ausgabe.h:24: Warnung: »int* ausgabe::counter«
ausgabe.cpp:15: Warnung: während es hier initialisiert wurde
Da steht aber kein Wort davon, das irgendwas im Header initialisiert wurde. Die Meldung bezieht sich einfach auf die Reihenfolge der Initialisierung. Du hast in der Klassendeklaration die Membervariable counter vor feld angegeben, in der Initialisierungsliste andersherum.
ausgabe.cpp: In copy constructor »ausgabe::ausgabe(const ausgabe&)«:
ausgabe.cpp:24: Warnung: »ausgabe::counter« sollte in Elementinitialisierungsliste initialisiert werden
ausgabe.cpp:24: Warnung: »ausgabe::feld« sollte in Elementinitialisierungsliste initialisiert werden
Naja, das gleiche Problem wie beim Standardkonstruktor auch.

Gruß
 
Also was für ein Blöder Fehler, hat aber funktioniert die anderen Warnungen konnte ich auch alle noch rausmachen.
Danke für die schnelle hilfe, hätte warscheinlich nur wieder stundenlang drüber gegrüblet, wie man sagt die kleinsten fehler haben den größten effekt ;)
 
Zurück