000
08.12.2003, 16:50 Uhr
~sebbraun
Gast
|
Ich habe ein Problem mit dem aufsplitten eines Programms in mehrere dateien:
das programm bestand bisher aus 2 dateien, base.cpp und main.cpp (und lief ausgezeichnet) Meine globalen Feldvariablen int note[] und int nummer[] (speichern jeweils zugehörige daten) befanden sich in der datei base.cpp. alle funktionen die darauf zugriffen befanden sich ebenfalls dort. nun will ich verschiedene funktionen auslagern so das das programm aus 4 dateien besteht: core main base und gui damit weiterhin alle funktionen auf die variablen zugreifen können wollte ich die beiden felder in der datei core.h definieren. Hierbei tritt jedoch das Problem auf: die bereits compilierten dateien lassen sich nicht zusammenlinken. DEr compiler gibt mir als fehlemeldung aus, dass die variabeln mehrmals definiert würden Habe bereits einiges ausprobiert, hatte jedoch keinen erfolg. Für hilfe wäre ich äußerst dankbar. hier mein Quelltext:
C++: |
// base.cpp:
#include <iostream> using namespace std; #include "core.h" #include "base.h"
void copyintarray(int* arrayin,int* arrayout) { for(int i=0;i<66;i++) { *arrayout = *arrayin; arrayout++; arrayin++; } for(int j=0;j<67;j++) { cout<<"array "<<j<<" ="<<*arrayout<<endl; arrayout++; } cout<<endl; return; }
void kommandozeile(int pargc,char** pargv) {
for(int x = 0; x < pargc; ++x) { split_func(pargv[x],'-'); } return; }
void split_func(char* param, char trenner) { char temp1[455]; char temp2[455]; bool bAnfang = 1; int y = 0; for(int x = 0; x < int(strlen(param)); x++) { if(bAnfang) { if(param[x] != trenner) { temp1[y] = param[x]; temp1[y+1] = '\0'; y++; } else { bAnfang = 0; y = 0; } } else { temp2[y] = param[x]; temp2[y+1] = '\0'; y++; } }
nummer[lauf]=atoi(temp1); note[lauf]=atoi(temp2); ++lauf; }
void listtop(int anzahl,int* psortnote,int* psortnummer) { int zaehler=1; int j =66; cout<<" Stelle "<<" "<<"Punktzahl"<<" "<<"Matr.Nummer"<<endl; while(j<67 && j>67-anzahl) { cout<<endl<<" "<<zaehler<<" " <<psortnote[j-1]<<" "<<psortnummer[j-1] ; j--; zaehler++; } }
int count(int* array,int size,int* anzahl) { int zaehler; for(int lauf=0;lauf<(size+1);lauf++) { if(*array != 0) { zaehler++; } } return zaehler; *anzahl=zaehler; }
void bubblesort(int* pnote,int* pnummer,int size) { for(int i = 0; i < size ; i++) { for(int j = 0; j < (size-1); j++) { if( pnote[j] > pnote[j + 1]) { int temp = pnote[j]; pnote[j] = pnote[j + 1]; pnote[j + 1] = temp;
int temp2 = pnummer[j]; pnummer[j] = pnummer[j + 1]; pnummer[j + 1] = temp2; } } } }
//core.cpp:
#include "base.h" #include "core.h" #include<iostream>
using namespace std;
void menu() { int pargc=0; char chose= 'A'; while (pargc == 0 && chose!='e') { cout<<endl<<endl; cout<<"bitte wählen sie einen Menupunkt:"<<endl; cout<<"+: (add) Klausurergebnis hinzufügen"<<endl; cout<<"- : (erase) Klausurergebnis entfernen"<<endl; cout<<"m : (mean) Klausurdurchschnitt ausgeben"<<endl; cout<<"q : (quota) Durchfallquote ausgeben "<<endl; cout<<"t : (top) Auflisten der Studenten mit der besten Note"<<endl; cout<<": (fail) Auflisten der durchgefallenen Studenten"<<endl; cout<<"l : (list) Auflisten aller Klausurergebnisse (unsortiert!) "<<endl; cout<<"e : (end) Programm beenden "<<endl; cin>>chose;
switch (chose) { case '+' : { add(); }break; case '-': { erase(); }break;
case 'm': { mean(); }break; case 'q': { quota(); }break;
case 't': { top(); }break;
case 'f': { fail(); }break;
case 'l': { list(); }break; case 'e': { continue; } } }
cout<<endl<<endl; }
void add() { int manum=0; while(manum!=100) { cout<<"bitte nummer,100 zum beenden"<<endl; cin>>manum; if (manum!=100) { int klauno; cout<<"note angeben"<<endl; cin>>klauno; bool gesetzt=0;
for(int i=1;i<66;i++) { if(manum == nummer[i]) { cout<<"erkannt"<<endl; note[i]=klauno; i=66; gesetzt=1; }break; cout<<"noch net do"<<endl; } if (gesetzt==0) { int j=0; while(nummer[j]!=0) { j++; } nummer[j]=manum; note[j]=klauno; } } }
}
void erase() { int manum=0; while(manum!=100) { cout<<"bittezu löschende nummer,100 zum beenden"<<endl; cin>>manum; bool geloescht;
if (manum==100) { geloescht=1; }
for(int i=0;i<66;i++) { if(manum == nummer[i]) { cout<<"erkannt"<<endl; note[i]=0; nummer[i]=0; i=66; geloescht=1; }break; cout<<"nicht vorhanden"<<endl; } } }
void list() { int j =0; cout<<" Stelle "<<" "<<"Punktzahl"<<" "<<"Matr.Nummer"<<endl; while(j< 66) {
cout<<endl<<" "<<j<<" " <<note[j]<<" "<<nummer[j] ; j++; } }
void mean() { double summe=0; double anzahl=0;
for(int lauf=0;lauf<66;lauf++) {
if(note[lauf]!=0) { summe +=note[lauf]; anzahl++; } } double durchschnitt = summe/anzahl; cout<<"der Durchschnitt beträgt:"<<durchschnitt<<endl<<endl<<endl; return; }
void quota() { double durchgefallen=0; double zaehler =0; for(int lauf=0;lauf<66;lauf++) { if(nummer[lauf] > 0) { zaehler ++; } if(note[lauf]<9 && nummer[lauf]>0) { durchgefallen++; } }
double quote = durchgefallen/zaehler;
cout<<"Von "<<zaehler<<" Teilnehmern sind "<<durchgefallen<<" durchgefallen."<<endl; cout<<"Die Durchfallquote beträgt damit "<<quote<<endl; return; }
void top() { int anzahl=10; cout<<"diese Funktion listet die klausuren nach fallender Punktzahl auf.Wievile ergebnisse möchten sie sehen?"<<endl; cin>>anzahl; int sortnummer[500]={}; int sortnote[500]={}; copyintarray(nummer,sortnummer); copyintarray(note,sortnote); bubblesort(sortnote,sortnummer,66); count(sortnummer,66,&anzahl); listtop(anzahl+1,sortnote,sortnummer); }
void fail() { double durchgefallen=0; double zaehler =0; for(int lauf=0;lauf<66;lauf++) { if(nummer[lauf] > 0) { zaehler ++; } if(note[lauf]<9 && nummer[lauf]>0) { durchgefallen++; } }
cout<<"Von "<<zaehler<<" Teilnehmern sind "<<durchgefallen<<" durchgefallen."<<endl; return; }
//main.cpp:
#include "base.h" #include "core.h"
int main(int argc,char** argv) { kommandozeile(argc,&*argv); menu();
return 0; }
//core.h
#ifndef _core_h_included_ #define _core_h_included_
int lauf=0; int nummer[66] = {}; int note[66]= {};
void fail(); void top(); void quota(); void mean(); void list(); void erase(); void add(); void menu();
#endif
//base.h:
#ifndef _base_h_included_ #define _base_h_included_
void bubblesort(int* pnote,int* pnummer,int size); int count(int* array,int size,int* anzahl); void listtop(int anzahl,int* psortnote,int* psortnummer); void split_func(char* param, char trenner); void kommandozeile(int pargc,char** pargv); void copyintarray(int* arrayin,int* arrayout);
#endif
|
Bearbeitung von loddab: |
Hier ein schönes Beispiel, warum man cpp-Tags setzten soll!
|
Dieser Post wurde am 08.12.2003 um 16:57 Uhr von Loddab editiert. |