CPP, Structs, Projektierung Undefined Refference to.

Gast #2949724
Lesenswert?

Hallo,

Wir besprechen im CPP-Unterricht gerade Structs, in einer Übungsaufgabe 
soll ein Programm geschrieben werden, dass die Struktur Datum über 
Funktionen einliest. Dabei soll in der Main eine Struktur von Typ Datum 
erstellt, eingelesen und ausgegeben werden.

Die Funktionen zur Ein/Ausgabe stehen in Datum.cpp.
Die Struktur Datum selbst, sowie die Funktionen zur Ein/Ausgabe stehen 
in der Datum.hpp.

Problem ist nun, dass der Linker die Fehlermedlung:
"Undefined Reference to einlesen(Datum)" zurückgibt.

Der Code sieht so aus: Main.cpp
1
#include <cstdlib>
2
#include <iostream>
3
#include "Datum.hpp"
4
using namespace std;
5

6
int main(int argc, char *argv[])
7
{
8
    Datum meinD;
9
    cout<<"Test";
10
    einlesen(meinD);
11
    ausgeben(meinD);
12
    system("PAUSE");
13
    return EXIT_SUCCESS;
14
}
Datum.cpp
1
#include <cstdlib>
2
#include <iostream>
3
#include "Datum.hpp"
4
using namespace std;
5

6
void einlesen(Datum &d)
7
{
8
    cout<<"Bitte Tag eingeben ";
9
    cin>>d.tag;
10
    cout<<"\n Bitte Monat eingeben ";
11
    cin>>d.monat;
12
    cout<<"\n Bitte Jahr eingeben ";
13
    cin>>d.jahr;
14
}
15

16
void ausgeben(Datum d)
17
{
18
    cout<<"Tag "<<d.tag<<" / Monat "<<d.monat<<" / Jahr "<<d.jahr;
19
}
Datum.hpp
1
struct Datum
2
{
3
    int tag;
4
    int monat;
5
    int jahr;
6
};
7

8
void einlesen(Datum);
9
void ausgeben(Datum);

Warum findet er die Funktion einlesen nicht?
In der Main.cpp wird Datum.hpp includet
in Datum.hpp stehen auch die Signaturen der Funktionen.
#2949754
Lesenswert?

"undefined reference" weist immer darauf hin, dass Du ein Objekt zwar 
deklariert, aber nicht definiert hast. Die wahrscheinlichsten zwei 
Ursachen dafür sind
 -> Eine cpp-Datei fehlt in der Compiler-Kommandozeile
 -> Funktionssignaturen von Deklaration und Definition passen nicht 
zusammen

Letzteres ist auch hier der Fall, wie ja schon gesagt wurde.

Übrigens solltest du folgendes ändern:
void ausgeben(Datum d) -> void ausgeben(const Datum& d)
system("PAUSE") -> cin.get();

Gruß,
Sven

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren