[PROBLEMA] [C++] Error: ld returned 1 exit status

#1
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.


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
#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;
}

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:

gronag

Utente Attivo
16,110
5,178
Hardware Utente
#2
Ricorda che Windows non permette la scrittura su files già in esecuzione … è probabile che la vecchia istanza del programma sia in esecuzione … il linker non è in grado di scrivere sull'eseguibile se ce n'è già uno in esecuzione … prova a dare uno sguardo e eventualmente chiudi il programma prima di compilarlo ... ;)
 
#5
Ciao, scusa se rispondo dopo così tanto ma ero partito per il ponte eheh
Ora sono a scuola quindi non posso provare su visual studio, ma appena torno a casa provo subito
Post unito automaticamente:

Ho appena provato a cancellare il file Pieno.o, ed ora compila correttamente.
Non sono sicuro che la soluzione sia definitiva, ma per ora va
 
Ultima modifica:
Mi Piace: gronag