Ciao a tutti, nella noia, ho iniziato a scrivere un programma per tenere il conto della benzina, ma mi sono imbattuto in un problema da cui non riesco ad uscire.
Non ancora completo tutte le funzioni del programma, ma quando vado a compilare, giusto per vedere se va, ricevo l'errore del titolo.
Solitamente uso dev cpp, ma visto che è famoso per i suoi innumerevoli bug (anche se io mi ci sono sempre trovato abbastanza bene:look:) ho installato code blocks, senza però risolvere il problema.
Questo è il programma, ho inserito anche il risultato della compilazione per aiutarvi a capire. Spero che qualcuno riesca ad aiutarmi perché non riesco proprio a venirne a capo
Grazie in anticipo a tutti
Non ancora completo tutte le funzioni del programma, ma quando vado a compilare, giusto per vedere se va, ricevo l'errore del titolo.
Solitamente uso dev cpp, ma visto che è famoso per i suoi innumerevoli bug (anche se io mi ci sono sempre trovato abbastanza bene:look:) ho installato code blocks, senza però risolvere il problema.
Codice:
#include <iostream>
#include <fstream>
#include "Pieno.h"
using namespace std;
using namespace pienoNS;
int main(int argc, char** argv) {
Pieno log_benza("motorino_benza.dat");
return 0;
}
#ifndef PIENO_H
#define PIENO_H
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
namespace pienoNS {
class Pieno {
public:
struct info_pieno {
string data; // gg/mm/aa
int km;
float litri;
};
static struct info_pieno p;
static struct info_pieno null;
static fstream log;
static int n_log;
Pieno(string nome_log); // Apre il file di log richiesto ed inizializza le variabili n_log e null
void scrivi(fstream &f); // Aggiunge alla fine del file una nuovo log
info_pieno leggi(fstream &f, string data); // Ricerca la data e stampa il log corrispondente
info_pieno leggi(fstream &f, int km); // Ricerca i Km e stampa il log corrispondente
void leggi(info_pieno p); // Stampa il log corrente
void leggi_tutto(); // Legge tutto il file
int conta_log(); // Conta i log totali nel file
};
}
#endif
#define PIENO_H
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
namespace pienoNS {
class Pieno {
public:
struct info_pieno {
string data; // gg/mm/aa
int km;
float litri;
};
static struct info_pieno p;
static struct info_pieno null;
static fstream log;
static int n_log;
Pieno(string nome_log); // Apre il file di log richiesto ed inizializza le variabili n_log e null
void scrivi(fstream &f); // Aggiunge alla fine del file una nuovo log
info_pieno leggi(fstream &f, string data); // Ricerca la data e stampa il log corrispondente
info_pieno leggi(fstream &f, int km); // Ricerca i Km e stampa il log corrispondente
void leggi(info_pieno p); // Stampa il log corrente
void leggi_tutto(); // Legge tutto il file
int conta_log(); // Conta i log totali nel file
};
}
#endif
#include "Pieno.h"
using namespace pienoNS;
void Pieno::leggi_tutto() {
for (int i=0;i<n_log;i++) {
log.read((char *) &p, sizeof(p));
leggi(p);
}
}
void Pieno::scrivi(fstream &f){
struct info_pieno p;
cout <<"inserisci la data del pieno: ";
cin >>p.data;
cout <<"a quanti chilometri hai fatto il pieno? ";
cin >>p.km;
cout <<"quanti litri hai messo? ";
cin >>p.litri;
f.write((char*)&p, sizeof(p));
n_log++;
}
void Pieno::leggi(info_pieno p) {
cout <<"data: " <<p.data;
cout <<"\nchilometri: " <<p.km;
cout <<"\nlitri: " <<p.litri;
cout <<"\n\n";
}
Pieno::info_pieno Pieno::leggi(fstream &f, string data) {
struct info_pieno p;
while (!log.eof()) {
f.read((char*)&p, sizeof(p));
if (p.data==data) return p;
}
return null;
}
Pieno::info_pieno Pieno::leggi(fstream &f, int km) {
struct info_pieno p;
while (!log.eof()) {
f.read((char *) &p, sizeof(p));
if (floor(p.km)==floor(km)) return p;
}
return null;
}
int Pieno::conta_log() {
log.seekg(0, ios::end);
long pos = log.tellg();
return pos/sizeof(info_pieno);
}
Pieno::Pieno(string nome_log) {
log.open(nome_log, ios::in | ios::app | ios::binary);
n_log = conta_log();
null.data = "";
null.km = 0;
null.litri = 0;
}
using namespace pienoNS;
void Pieno::leggi_tutto() {
for (int i=0;i<n_log;i++) {
log.read((char *) &p, sizeof(p));
leggi(p);
}
}
void Pieno::scrivi(fstream &f){
struct info_pieno p;
cout <<"inserisci la data del pieno: ";
cin >>p.data;
cout <<"a quanti chilometri hai fatto il pieno? ";
cin >>p.km;
cout <<"quanti litri hai messo? ";
cin >>p.litri;
f.write((char*)&p, sizeof(p));
n_log++;
}
void Pieno::leggi(info_pieno p) {
cout <<"data: " <<p.data;
cout <<"\nchilometri: " <<p.km;
cout <<"\nlitri: " <<p.litri;
cout <<"\n\n";
}
Pieno::info_pieno Pieno::leggi(fstream &f, string data) {
struct info_pieno p;
while (!log.eof()) {
f.read((char*)&p, sizeof(p));
if (p.data==data) return p;
}
return null;
}
Pieno::info_pieno Pieno::leggi(fstream &f, int km) {
struct info_pieno p;
while (!log.eof()) {
f.read((char *) &p, sizeof(p));
if (floor(p.km)==floor(km)) return p;
}
return null;
}
int Pieno::conta_log() {
log.seekg(0, ios::end);
long pos = log.tellg();
return pos/sizeof(info_pieno);
}
Pieno::Pieno(string nome_log) {
log.open(nome_log, ios::in | ios::app | ios::binary);
n_log = conta_log();
null.data = "";
null.km = 0;
null.litri = 0;
}
Codice:
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x12): undefined reference to `pienoNS::Pieno::n_log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x26): undefined reference to `pienoNS::Pieno::p'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x2b): undefined reference to `pienoNS::Pieno::log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x3d): undefined reference to `pienoNS::Pieno::p'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x138): undefined reference to `pienoNS::Pieno::n_log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x140): undefined reference to `pienoNS::Pieno::n_log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x221): undefined reference to `pienoNS::Pieno::log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x27d): undefined reference to `pienoNS::Pieno::null'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x2cd): undefined reference to `pienoNS::Pieno::log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x348): undefined reference to `pienoNS::Pieno::null'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x3a3): undefined reference to `pienoNS::Pieno::log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x3b5): undefined reference to `pienoNS::Pieno::log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x410): undefined reference to `pienoNS::Pieno::log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x427): undefined reference to `pienoNS::Pieno::n_log'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x433): undefined reference to `pienoNS::Pieno::null'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x441): undefined reference to `pienoNS::Pieno::null'
d:\Alessio\Documenti\Dev C++\Benza\Pieno.o Pieno.cpp:(.text+0x44d): undefined reference to `pienoNS::Pieno::null'
d:\Alessio\Documenti\Dev C++\Benza\collect2.exe [Error] ld returned 1 exit status
25 d:\Alessio\Documenti\Dev C++\Benza\Makefile.win recipe for target 'benza.exe' failed
Questo è il programma, ho inserito anche il risultato della compilazione per aiutarvi a capire. Spero che qualcuno riesca ad aiutarmi perché non riesco proprio a venirne a capo
Grazie in anticipo a tutti
Ultima modifica: