|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2002
Città: Como
Messaggi: 287
|
[ C++ ] errore di compilazione nel costruttore
Sono sicuro che sia una cavolata, ma di quelle che cavolate che detesto perchè fanno perdere un bel po' di tempo
Vorrei sapere cosa significa questo errore: me lo dà nel costruttore, ma se commento il costruttore poi inizia a darmelo per tutte le funzioni in cascata praticamente Codice:
sly@sid:~/programming/C++/classi/10$ g++ -g -Wall polimorf.cc -o polimorf polimorf.cc:7: ISO C++ forbids defining types within return type polimorf.cc:7: return type specification for constructor invalid Codice:
File di intestazione
#ifndef LAVORATORE_H
#define LAVORATORE_H
// Classe base astratta
class Lavoratore{
public:
Lavoratore(const char *, const char *);
virtual ~Lavoratore(); //distruttore virtuale
const char* getNome() const;
const char* getCognome() const;
virtual int getPaga() const = 0; //virtuale pura
virtual void print() const; //virtuale
private:
char* nome;
char* cognome;
};
#endif
[...]
File polimorf.cc
#include <iostream>
using namespace std;
#include <cstring>
#include <cassert>
#include "polimorf.h"
Lavoratore::Lavoratore( const char *nm, const char *cgnm){
nome = new char[strlen(nm)+1];
assert(nome!=0);
strcpy(nome,nm);
cognome = new char[strlen(cgnm)+1];
assert(cognome!=0);
strcpy(cognome,cgnm);
}
[...]
__________________
Nove millimetri. Non sono mai più lontano di così. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per caso non hai incluso lavoratore.h ?!?!!?
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2002
Città: Como
Messaggi: 287
|
Ho fatto un file di intestazione unico "polimorf.h" in cui è definito la classe Lavoratore
__________________
Nove millimetri. Non sono mai più lontano di così. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
prova a togliere il primo const da questi e vedi se compila:
const char* getNome() const; const char* getCognome() const; |
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Dec 2002
Città: Como
Messaggi: 287
|
Quote:
__________________
Nove millimetri. Non sono mai più lontano di così. |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Dec 2002
Città: Como
Messaggi: 287
|
Ancora un errore identico :(
Questa volta vi posto il codice completo, visto che è abbastanza corto: Codice:
File di instestazione - shapes.h
#ifndef SHAPE
#define SHAPE
class Shape{
public:
Shape(int=0, int=0);
inline virtual ~Shape(){}
virtual void print() const = 0;
protected:
int x;
int y;
};
# endif
#ifndef PUNTO
#define PUNTO
class Punto : public Shape{
public:
Punto(int=0,int=0);
virtual void print() const;
};
#endif
#ifndef CERCHIO
#define CERCHIO
class Cerchio : public Punto{
public:
Cerchio(int=0, int=0, int=0);
virtual void print() const;
private:
int raggio;
}
#endif
File shapes.cc
#include <iostream>
using std::cout;
using std::endl;
#include "shapes.h"
Shape::Shape(int a, int b){
x=a; y=b;
}
Punto::Punto(int a, int b)
: Shape(a,b)
{
}
void Punto::print() const{
cout << "\n(" << x << "," << y << ")\n";
}
Cerchio::Cerchio(int a, int b, int r)
: Punto(a,b)
{
raggio = (r>=0 ? r : 0);
}
void Cerchio::print() const{
cout << "\nSono cerchio con centro ";
Punto::print();
cout << "\ne raggio " << raggio <<endl;
}
void dynamic_binding(Shape *);
int main(){
Shape *bcpArray[2]; //Array di puntatori alla classe base (base class pointer)
Punto p(2,5);
Cerchio c(0,0,9);
bcpArray[0]=&p; //punta a un oggetto di tipo Punto
bcpArray[1]=&c; //punta a un oggetto di tipo Cerchio
/* il ciclo for chiama la funzione di binding dinamico per tutti i puntatori bcp*/
for(int i=0; i<2; i++){
dynamic_binding(bcpArray[i]);
}
return 0;
}
//invoca la giusta funzione concreta a seconda dell'oggetto puntato da bcp
void dynamic_binding(Shape *bcp){
bcp->print();
}
Output del compilatore
sly@sid:~/programming/C++/classi/10$ g++ -g -Wall shapes.cc -o shapes
shapes.cc:6: ISO C++ forbids defining types within return type
shapes.cc:6: return type specification for constructor invalid
sly@sid:~/programming/C++/classi/10$
__________________
Nove millimetri. Non sono mai più lontano di così. |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Dec 2002
Città: Como
Messaggi: 287
|
Ecco, postandovi il codice completo mi sono accorto dell'errore
Lo sapevo che era una gadanata: non ho messo il punto e virgola alla fine dell'ultima classe
__________________
Nove millimetri. Non sono mai più lontano di così. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:07.



















