[gelöst]Projekt mit mehreren Dateien erstellen?
-
Compiler / IDE?
Btw.: Dein Code ist alles andere als schönes C++.
#include <iostream.h> #include <conio.h> #include <stdio.h>
veraltetvoid main(void)
war das jemals gescheites C++? 
main hat den Rückgabetyp int!
-
Dravere schrieb:
Ganz ehrlich, ich geb dir einen guten Rat, schmeiss das Buch oder Tutorial weg, welches du aktuell nutzt, denn es ist völlig veraltet, falsch und kann dir anscheinend nicht mal die Aufteilung von Header- und Implementationsdateien beibringen.
<iostream.h> -> Kein C++ Standardheader
<conio.h> -> Gibt es zwar, ist aber auch kein Standardheader
<stdio.h> -> C Header, kein C++ Headervoid main(void) -> Ungültig in C und C++
Kein namespace std vorhanden -> völlig veraltetes C++, mehr als 10 Jahren!
Ja. Da hast du völlig recht. Es ist ein compiler von 1992 und auf dem MUSS ich meine Prüfungen machen

Ich probier mal deine Beispiele aus, denn da seh ich ein paar Dinge die ich noch nicht probiert habe...bzw. die in meinem Unterrichtsmaterial nicht standen

Soweit erst mal danke

-
So. Ich hab jetzt diese drei Dateien erstellt
Header:
#ifndef wechsel_h__ #define wechsel_h__ class flaeche { private: float breite,laenge; public: float a; float b; flaeche(); float area(float,float); }; #endifDeklaration:
#include "wechsel.h" #include <iostream.h> flaeche :: flaeche() { breite=a; laenge=b; } float flaeche :: area(float breite, float laenge) { return (breite*laenge); }Main:
#include <iostream.h> #include <conio.h> #include <stdio.h> #include "wechsel.h" //Part 3 void main(void) { flaeche f1; clrscr(); cout<<endl<<"Bitte geben sie die Breite ein: "; cin>>f1.a; cout<<endl<<"Bitte geben sie die Laenge ein: "; cin>>f1.b; cout<<endl<<"Die Fl„che betr„gt: " <<f1.area(f1.a,f1.b); getchar(); }Das compilieren schlägt fehl weil er behauptet dass die "Class flaeche" nicht existiert bzw. einen Deklaration syntax error in der Headerdatei sieht und deswegen in allen anderen Dateien nichts mit der Klasse anfangen kann...und dann entsprechende Fehlermeldungen ausgibt.
Was stimmt an der Headerdatei nicht?
-
Ja. Da hast du völlig recht. Es ist ein compiler von 1992 und auf dem MUSS ich meine Prüfungen machen

Das soll wohl ein witz sein (Von deinem Lehrer xD)...
@Thema
versuch mal die cpp so zu machen:#ifndef wechsel_h__ #define wechsel_h__ class flaeche { private: float breite,laenge; public: float a; float b; flaeche(); float area(float breite ,float laenge); }; #endif
-
Erklär mir bitte wie das funktionieren kann:
class flaeche { public: float a; float b; flaeche(); }; flaeche :: flaeche() { breite=a; laenge=b; }Das was du eher willst ist wohl
flaeche :: flaeche( float a, float b ) { breite=a; laenge=b; }
-
Wohl eher umgekehrt..
-
drakon schrieb:
Wohl eher umgekehrt..
Nö. Er hat 2 private floats breite und laenge, und zwei public floats a uns b. Da wollte er jetzt im Konstruktor die beiden public floats den private floats zuweisen

-
Hmm,ja, macht sinn. Wie soll sonst a nach breite kommen?
Allerdings sagt er jetzt:
"Typ qualifier 'flaeche' musst be a struct or class"
-
franz schrieb:
drakon schrieb:
Wohl eher umgekehrt..
Nö. Er hat 2 private floats breite und laenge, und zwei public floats a uns b. Da wollte er jetzt im Konstruktor die beiden public floats den private floats zuweisen

Aso. Ich habe nur deinen Quellcode angeschaut.. Und da sollte es, wenn umgekehrt sein.. Also so:
flaeche :: flaeche( float breite, float laenge ) { a = breite; b = laenge; }@Andi S :
Zeig doch bitte mal den Code, den du jetzt hast. Ich weiss nicht so genau, was du überhaupt machen willst..
-
So, ich hab das jetzt mal umgestellt.
Header:
#ifndef wechsel_h__ #define wechsel_h__ class flaeche { private: float breite,laenge; public: float a; float b; flaeche(); float area(float,float); }; #endifDeklaration:
#include "wechsel.h" flaeche :: flaeche() { breite=a; laenge=b; }; float flaeche :: area(float breite, float laenge) { return (breite*laenge); }main:
#include <iostream.h> #include <conio.h> #include <stdio.h> #include "wechsel.h" //Part 3 void main(void) { flaeche f1; clrscr(); cout<<endl<<"Bitte geben sie die Breite ein: "; cin>>f1.a; cout<<endl<<"Bitte geben sie die Laenge ein: "; cin>>f1.b; cout<<endl<<"Die Fl„che betr„gt: " <<f1.area(f1.a,f1.b); getchar(); }Der Linker fängt auch an zu arbeiten, schafft es aber nicht ganz zur exe weil:
Compiling Wechsel.cpp. Compiling Wechs.cpp. Linking 1.exe. Linker warning: No Modul definition files specified: using defaults. Linker error: _main defined in module Wechsel.cpp(das ist die mit der main drin) is duplicated in module Wechsel.cppSo wie es aussieht steht nur noch etwas "doppeltes" zwischen mir und der exe. Mal ganz abgesehen von irgendwelchen Definitionsdateien, was immer auch damit gemeint ist.
Vorschläge?
Edith:
Ja, das Programm bringt als Ergebnis 0 raus weil flaeche() keine Parameter hat.
-
drakon schrieb:
@Andi S :
Zeig doch bitte mal den Code, den du jetzt hast. Ich weiss nicht so genau, was du überhaupt machen willst..Ich möchte einfach das script, welches ich im Anfangspost gepostet habe, auch drei dateien aufteilen. Zwecks Projekt, was ist eine Haederdatei, was ist eine Objektdatei ect.pp.
Das Anfangsscript funktioniert in einer Datei geschrieben einwandfrei. Ich kann sogar hin gehen und bei "float area(float breite, float laenge)" ändern in "char area(float breite, float laenge)" und bekomme dann als Ausgabe die graphische Umsetzung des ASCII-Codes. Also wenn ich für a 7,001 eingebe und für b 14,001, dann kommt als Ausgabe "b" da ja 98,00irgendwas im ASCII-Code 98 ist und das ist nun mal der Buchstabe klein-b.
Das heißt, es funktioniert alles. Nur wenn ich das Script auf Header, Deklaration und Main aufteilen will funzt nix mehr

-
drakon schrieb:
@Andi S :
Zeig doch bitte mal den Code, den du jetzt hast. Ich weiss nicht so genau, was du überhaupt machen willst..So, nachdem ich den Fehler mit dem duplicated gefunden habe hier mein letzter noch offener Fehler:
Er sagt mir dass ich in meiner Haederdatei in Zeile 4 einen
"Declaration syntax error" habe
Haederdatei:
#ifndef wechsel2_h__ #define wechsel2_h__ class flaeche { private: float breite,laenge; public: float a; float b; flaeche(); float area(float, float); }; #endifDeklarationsdatei wechs.cpp:
#include "wechsel2.h" #include <iostream.h> flaeche :: flaeche() { breite=a; laenge=b; } float flaeche :: area(float breite, float laenge) { return (breite*laenge); }Und die main:
#include "wechsel2.h" #include <iostream.h> #include <conio.h> #include <stdio.h> //Part 3 void main(void) { flaeche f1; clrscr(); cout<<endl<<"Bitte geben sie die Breite ein: "; cin>>f1.a; cout<<endl<<"Bitte geben sie die Laenge ein: "; cin>>f1.b; cout<<endl<<"Die Fl„che betr„gt: " <<f1.area(f1.a,f1.b); getchar(); }Wenn man das mit dem Script aus dem Eingangspost vergleicht sieht man dass an der Grundsyntax nichts verändert ist. Und das Eingangsscript hat in einer Datei gefunzt. Was also gibt es da jetzt an der Klassendeklaration in der Haederdatei rumzumotzen? Was ist da falsch?
Edith:
So, es ist mit der Hilfe von hier alles gelöst. Der letzte zu bekämpfende Fehler war, dass man die *h beim Borland 3.1 nicht mit in das Projekt nehmen kann sondern nur im selben Ordner plazieren muss. Danke für die mühen aller.
Ergänzende informationen in den Nebenthreads
http://www.c-plusplus.net/forum/viewtopic-var-t-is-234809.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-234795.html
-
Dravere schrieb:
<iostream.h> -> Kein C++ Standardheader
http://www.cplusplus.com/reference/
sondern?
-
kingcools2 schrieb:
http://www.cplusplus.com/reference/
sondern?
Ich kenne diese Referenz sehr gut, sie steht in meiner Signatur :p
Und schau es dir mal genau an. Es heisst<iostream>ohne ".h". Gilt für alle Standardheader von C++, sie enden nie mit einem ".h".Grüssli
-
jo hab ich dann auch entdeckt
danke trotzdem