EueRolando
Cadet 2nd Year
- Registriert
- Aug. 2014
- Beiträge
- 29
Hallo,
ich bin c++-Anfänger und deshalb grade was typische Lösungen/Vorgenhensweisen betrifft nicht sicher.
Ich möchte eine (Bücher)Bibliotheksverwaltung realisieren dabei sollen Bücher im Bestand einer Bibliothek auf 3 verschiedene Weisen in eine "Datenbank" aufgenommen werde. 1. Ein Array mit fester Größe: Art A 2. Ein Array mit Variabler Größe: Art B 3. Eine einfach verkettete Liste (auch mit Variabler Größe) Art C
Ich schreibe dieses Programm mit 2 Modulen was im folgenden stark gekürzt so aussieht:
struct_ErzeugungArrays.h
struct_ErzeugungArrays.cpp
Datenausgabe.h
Datenausgabe.cpp
Hier meckert er in der .cpp. Der Compiler meldet:
"[BCC32 Fehler] Datenausgabe.cpp(9): E2450 Undefinierte Struktur 'sBuchEintrag'
[BCC32 Fehler] Datenausgabe.cpp(9): E2453 Größe des Typs 'sBuchEintrag' ist unbekannt oder Null
[BCC32 Fehler] Datenausgabe.cpp(9): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich".
So nun habe ich mir schon ein wenig Gedanken gemacht. Ich nehme mal an da der struct in einem anderen Modul definiert und deklariert ist kennt diese Modul den sBuchEintrag nicht. Nur wenn ich die Datei "struct_ErzeugungArrays.h" includiere meldet er immer noch:
"[BCC32 Fehler] Datenausgabe.cpp(13): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich"
Nun habe ich folgende Fragen: ist es richtig, dass ich die Module untereinander mit
bekannt mache wenn es erforderlich ist? Oder: Besteht die Notwendigkeit oder Möglichkeit dieses "Bekanntmachen" zentral an einer bestimmten Stelle vorzunehmen (vielleicht in main)? 2.Frage Wie löse ich mein Problem bzw. worin besteht genau der Fehler?
main.cpp
Grüße
EueRolando
ich bin c++-Anfänger und deshalb grade was typische Lösungen/Vorgenhensweisen betrifft nicht sicher.
Ich möchte eine (Bücher)Bibliotheksverwaltung realisieren dabei sollen Bücher im Bestand einer Bibliothek auf 3 verschiedene Weisen in eine "Datenbank" aufgenommen werde. 1. Ein Array mit fester Größe: Art A 2. Ein Array mit Variabler Größe: Art B 3. Eine einfach verkettete Liste (auch mit Variabler Größe) Art C
Ich schreibe dieses Programm mit 2 Modulen was im folgenden stark gekürzt so aussieht:
struct_ErzeugungArrays.h
Code:
//---------------------------------------------------------------------------
/*Diese Unit implementiert den zur Speicherung der Daten notwendigen struct
(alle drei Arten, A. B. und C.) nutzen diesen hier deklarierten struct*/
#include <stdio.h>
#include <iostream> //für cout/cin
//---------------------------------------------------------------------------
struct sBuchEintrag{
sBuchEintrag *next;
char author[20];
unsigned int kaufdatum;
};
sBuchEintrag *ArtA();
sBuchEintrag *ArtB();
sBuchEintrag *ArtC();
struct_ErzeugungArrays.cpp
Code:
#include "struct_ErzeugungArrays.h"
//---------------------------------------------------------------------------
sBuchEintrag *ArtA(){ //Methode erzeugt ein 5 Elemente Array von BuchEintrag
sBuchEintrag arta[5]; //5 Elemente vom Typ sBuchEintrag
return arta;
}
sBuchEintrag *ArtB(){
sBuchEintrag *artb=NULL; //Der Zeiger wird initialisiert, wird später auf das Array zeigen
int anzahleinträge=0; //die Variable vom Typ int wird initialisiert später benötigt um das Array mit variabler Größe zu erstellen
std::cin>>anzahleinträge;
artb=new sBuchEintrag[anzahleinträge]; //mit new wird das Array erzeugt, damit es unter dem Label artb angesprochen werden kann muss der Zeiger(artb) noch auf die erste Adresse zeigen
return artb;
}
sBuchEintrag *ArtC(){
sBuchEintrag *artc= NULL; //dieser Zeiger wird benötigt, um später auf den Anfang der Liste zu zeigen
int anzahleinträge=0; //wird wieder benötigt um das Array zu erstellen
sBuchEintrag *anker=NULL; //Zeiger der zu einem belibigen Element der Liste zeigt, um sich durch die Liste zu "hangeln"
std::cin>>anzahleinträge;
for(int i=1; i<=anzahleinträge; i++){
if (i==1){
artc = new sBuchEintrag; //erzeugt das erste Element und lässt artc darauf zeigen
anker = artc;
}
else{
anker->next = new sBuchEintrag;
anker = anker->next;
}
}
return artc;
}
Datenausgabe.h
Code:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <iostream> //für cout/cin
//---------------------------------------------------------------------------
void AusgabeTabelle(struct sBuchEintrag *datensatz);
Datenausgabe.cpp
Code:
//---------------------------------------------------------------------------
#pragma hdrstop
#include "Datenausgabe.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
void AusgabeTabelle(struct sBuchEintrag *datensatz){
std::cout<<"Alle Daten werden ausgegeben";
for (int i=0; i < 5; i++) {
std::cout<<datensatz[i]->kaufdatum;
}
}
Hier meckert er in der .cpp. Der Compiler meldet:
"[BCC32 Fehler] Datenausgabe.cpp(9): E2450 Undefinierte Struktur 'sBuchEintrag'
[BCC32 Fehler] Datenausgabe.cpp(9): E2453 Größe des Typs 'sBuchEintrag' ist unbekannt oder Null
[BCC32 Fehler] Datenausgabe.cpp(9): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich".
So nun habe ich mir schon ein wenig Gedanken gemacht. Ich nehme mal an da der struct in einem anderen Modul definiert und deklariert ist kennt diese Modul den sBuchEintrag nicht. Nur wenn ich die Datei "struct_ErzeugungArrays.h" includiere meldet er immer noch:
"[BCC32 Fehler] Datenausgabe.cpp(13): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich"
Nun habe ich folgende Fragen: ist es richtig, dass ich die Module untereinander mit
Code:
#include
main.cpp
Code:
//---------------------------------------------------------------------------
#pragma hdrstop
#include "struct_ErzeugungArrays.h"
#include "Datenausgabe.h"
#include <tchar.h>
#include <iostream>
//---------------------------------------------------------------------------
using namespace std;
#pragma argsused
sBuchEintrag *datensatza=NULL;
sBuchEintrag *datensatzb=NULL;
sBuchEintrag *datensatzc=NULL;
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"Programm gestartet\n";
datensatza=ArtA();
datensatzb=ArtB();
datensatzc=ArtC();
AusgabeTabelle(datensatza);
AusgabeTabelle(datensatzb);
AusgabeTabelle(datensatzc);
return 0;
}
//---------------------------------------------------------------------------
Grüße
EueRolando
Zuletzt bearbeitet: