Rechteck Klasse
-
Guten Mittag,
muss für die uni gerade ne klasse rechteck schreiben, hier der code://--------------------------------------------------------------------------- #ifndef RECTANGLE_H #define RECTANGLE_H #include <vcl.h> #pragma hdrstop #include <iostream> #include <tchar.h> //--------------------------------------------------------------------------- #pragma argsused using namespace std; class Rectangle { private: int width; int height; public: Rectangle(int = 0, int = 0); void print() const; }; #endif void Rectangle::print() const { for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (i == 0 || i == height-1) { cout << "x "; } else { if (j == 0 || j == width-1) { cout << "x"; } else { cout << " "; } } } endl(cout); } } Rectangle::Rectangle(int w, int h) { width = w; height = h; } int _tmain(int argc, _TCHAR* argv[]) { Rectangle r1(5,3); r1.print(); Rectangle r2(15,5); r2.print(); cin.get(); return 0; }
aber irgendwie will der bei mir das rechteck in der main nicht erzeugen einzige was der erlaubt ist "Rectangle;" und das is ja mal totaler unsinn.... kann jemand da mal eben drüber gucken und mir sagen wo das problem liegt??
vielen dank
-
Also erstmal: Wozu diese ganzen sinnlosen includes? Du brauchst nur <iostream>, mehr nicht.
Genauso ist "int _tmain(int argc, _TCHAR* argv[])" in deinem Fall überhaupt nicht nötigt, ein "int main()" tut's auch.aber irgendwie will der bei mir das rechteck in der main nicht erzeugen einzige was der erlaubt ist "Rectangle;"
Also bei mir klappt dein Code (zumindest nachdem ich die nicht verwendeten/bei mir nicht verfügbaren Header rausgeschmissen habe). Die Rechtecke werden zwar nicht richtig angezeigt, aber es wird ohne Probleme kompiliert.
Hast du ggf. versucht so etwas zu machen:
int main() { Rectangle r1(); /*...*/ }
Wenn ja, dann handelt es sich hierbei um die Deklaration einer Funktion mit dem Namen r1, die keine Argumente erwartet und ein Rectangle als Rückgabewert hat.
Richtig wäre hier: Rectangle r1;Wenn das nicht das Problem ist, müsstest du dich vielleicht nochmal genauer ausdrücken.
-
danke schonmal für die hilfe, werds gleich ausprobieren....
die includes etc. kommen daher das ich im c++ builder schreibe und der den quatsch automatisch in ne leere cpp datei reinhaut und ich mir gedacht hab, wenn das programm die vorgibt, können die ja auch nich schaden
-
egal was ich mache der compiler gibt immer die fehlermeldung raus das er hinter Rectangle ein simicolon erwartet...
ich kann auch alle includes rausschmeißen das scheint nix zu ändern außer #include <vcl.h> die braucht der c-builder scheinbar zum compilieren
-
D.h. folgender Code kompiliert bei dir nicht?
//--------------------------------------------------------------------------- #ifndef RECTANGLE_H #define RECTANGLE_H #include <iostream> #include <vcl.h> //--------------------------------------------------------------------------- using namespace std; class Rectangle { private: int width; int height; public: Rectangle(int w = 0, int h = 0); void print() const; }; #endif void Rectangle::print() const { for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (i == 0 || i == height-1) { cout << "x "; } else { if (j == 0 || j == width-1) { cout << "x"; } else { cout << " "; } } } cout << endl; } } Rectangle::Rectangle(int w, int h) { width = w; height = h; } int main() { Rectangle r1(5, 3); r1.print(); cin.get(); }
-
nein irgendwie nicht, krieg folgende Fehlermeldung:
[BCC32 Fehler] Opdracht-9.1.cpp(49): E2379 In Anweisung fehlt ;
Vollständiger Parser-Kontext
Opdracht-9.1.cpp(48): Analyse: int main()
[BCC32 Fehler] Opdracht-9.1.cpp(50): E2451 Undefiniertes Symbol 'r1'
Vollständiger Parser-Kontext
Opdracht-9.1.cpp(48): Analyse: int main()
-
Das Listing ist meinem ästhetischen Verständnis nach etwas gruselig. Ich habe hier mal eine sinnvolle Einteilung der Header- und Quelldateien gewählt sowie einige Kleinigkeiten im Programm geändert (Stichwort: std::string), vorgenommen. Was die VLC-Header angeht, kann ich nichts sinnvolles beisteuern, da ich den VLC nicht nutze.
#include "rectangle.h" int main() { Rectangle r(16, 10); r.print(); }
rectangle.h
#if !defined(CPPDE_RECTANGLE_H__INCLUDED) #define CPPDE_RECTANGLE_H__INCLUDED class Rectangle { public: // +++ Interface +++ Rectangle(unsigned int width=0, unsigned int height=0); // Default-Constructor void print() const; // Prints the rectangle onto the console (std::cout) // +++ Non-Interface +++ private: unsigned int width_; unsigned int height_; }; #endif
#include "rectangle.h" #include <string> #include <iostream> using std::cout; using std::string; using std::endl; Rectangle::Rectangle(unsigned int width, unsigned int height) : width_(width), height_(height) { } void Rectangle::print() const { // Rectangle with either width or height equal zero will not be // displayed if(width_ == 0u || height_ == 0u) return; for(unsigned int n = 0u; n < height_; ++n) { // If 1st and last line print out a "filled" line. Else print out // only left and right side (imitate borders) if(n == 0 || n == height_ - 1) { cout << string(width_, '+') << endl; } else { cout << '+' << string(width_ - 2, ' ') << '+' << endl; } } }
Darüber hinaus kann ich nur empfehlen, alle Projekte mit den Compiler-Optionen -Wall und -pedantic zu übersetzen. Des weiteren niemals(!) using in Header-Dateien.
http://www.cppreference.com/wiki/string/string_constructors
Grüße ...
Heiko
-
mh.....
hab einfach nen neues projekt gemacht diesmal einfach von anfang an ohne vcl einstellung und einfach nur alles rüberkopiert und jetzt funktionierts....
danke für eure hilfe