PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Noob hilfe c++



lacsap
15-09-2003, 18:15
Falls sich wer wundert, hab den alten Thread gelöscht, da er imo im falschen Forum war.

Zum Problem:

Ich hab mit Dev-c++ 4.9.8.0 eine Consolen-App erstellt, die sich leider hartnäckig weigert zu kompilieren.


Quelltext:


#include <iostream>
#include <stdlib.h>
using namespace std;

enum choice
{DrawRect = 1, GetArea, GetPerim, ChangeDimensions, Quit};

class Rectangle
{
public:
// Kon-, De-Struktor
Rectangle(int width, int height);
~Rectangle();

// Zugriffsfunktionen
int GetHeight() const { return itsHeight; }
int GetWidth() const { return itsWidth; }
int GetArea() const { return itsHeight * itsWidth; }
int GetPerim() const { return 2*itsHeight + 2*itsWidth; }
void SetSize(int newWidth, int newHeight);

private:
int itsWidth;
int itsHeight;
};


void Rectangle::SetSize(int newWidth, int newHeight)
{
itsWidth = newWidth;
itsHeight = newHeight;
}


Rectangle::Rectangle(int width, int height)
{
itsWidth = width;
itsHeight = height;
}

Rectangle::~Rectangle() {}

int DoMenu ();
void DoDrawRect(Rectangle);
void DoGetArea(Rectangle);
void DoGetPerim(Rectangle);

int main()
{
Rectangle theRect(30,5);

int choice = DrawRect;
int fQuit = false;

while (!fQuit)
{
choice = DoMenu();
if (choice < DrawRect || choice > Quit)
{
cout << "\nAuswahl ungueltig. Bitte neu versuchen.\n\n";
continue;
}

switch (choice)
{
case DrawRect:
DoDrawRect(theRect);
break;
case GetArea:
DoGetArea(theRect);
break;
case GetPerim:
DoGetPerim(theRect);
break;
case ChangeDimensions:
int newLength, newWidth;
cout << "\nNeue Breite: ";
cin >> newWidth;
cout << "Neue Hoehe: ";
cin >> newLength;
theRect.SetSize(newWidth, newLength);
DoDrawRect(theRect);
break;
case Quit:
fQuit = true;
cout << "\nVerlassen...\n\n";
break;
default:
cout << "Fehler beim Auswaehlen!\n";
fQuit = true;
break;
}

}
return 0;
}


int DoMenu()
{
int choice;
cout << "\n\n *** Menu ***\n";
cout << "(1) Rechteck zeichnen\n";
cout << "(2) Fläche\n";
cout << "(3) Umfang\n";
cout << "(4) Größe verändern";
cout << "(5) Beenden";

cin >> choice;
return choice;
}


void DoDrawRect(Rectangle theRect)
{
int height = theRect.GetHeight();
int width = theRect.GetWidth();

for (int i = 0; i<height; i++)
{
for (int j = 0; j< width; j++)
cout << "*";
cout << "\n";
}
}


void DoGetArea(Rectangle theRect)
{
cout << "Flaeche: " << theRect.GetArea() << endl;
}


void DoGetPerim(Rectangle theRect)
{
cout << "Umfang: " << theRect.GetPerim() << endl;
}



Fehler:


Compiler: Default compiler
Building Makefile: "C:\Dev-Cpp\Makefile.win"
Führt make... aus
make.exe -f "C:\Dev-Cpp\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/include/c++" -I"C:/Dev-Cpp/include/c++/mingw32" -I"C:/Dev-Cpp/include/c++/backward" -I"C:/Dev-Cpp/include"

main.cpp:50: variable or field `DoDrawRect' declared void
main.cpp:50: invalid conversion from `BOOL (*)(HDC__*, int, int, int, int)' to
`int'
main.cpp:51: variable or field `DoGetArea' declared void

main.cpp:51: invalid conversion from `BOOL (*)(HDC__*, int, int, int, int)' to
`int'
main.cpp:52: variable or field `DoGetPerim' declared void
main.cpp:52: invalid conversion from `BOOL (*)(HDC__*, int, int, int, int)' to
`int'
main.cpp: In function `int main()':
main.cpp:56: `Rectangle' undeclared (first use this function)
main.cpp:56: (Each undeclared identifier is reported only once for each
function it appears in.)
main.cpp:56: parse error before `(' token
main.cpp:73: `theRect' undeclared (first use this function)
main.cpp:73: `DoDrawRect' cannot be used as a function
main.cpp:76: `DoGetArea' cannot be used as a function
main.cpp:79: `DoGetPerim' cannot be used as a function
main.cpp:88: `DoDrawRect' cannot be used as a function
main.cpp: At global scope:
main.cpp:120: parse error before `)' token
main.cpp: In function `void DoDrawRect(...)':
main.cpp:121: `void DoDrawRect(...)' redeclared as different kind of symbol
main.cpp:50: previous declaration of `int DoDrawRect'
main.cpp:50: previous non-function declaration `int DoDrawRect'
main.cpp:121: conflicts with function declaration `void DoDrawRect(...)'
main.cpp: At global scope:
main.cpp:134: parse error before `)' token
main.cpp: In function `void DoGetArea(...)':
main.cpp:135: `void DoGetArea(...)' redeclared as different kind of symbol
main.cpp:51: previous declaration of `int DoGetArea'
main.cpp:51: previous non-function declaration `int DoGetArea'
main.cpp:135: conflicts with function declaration `void DoGetArea(...)'
main.cpp: At global scope:
main.cpp:140: parse error before `)' token
main.cpp: In function `void DoGetPerim(...)':
main.cpp:141: `void DoGetPerim(...)' redeclared as different kind of symbol
main.cpp:52: previous declaration of `int DoGetPerim'
main.cpp:52: previous non-function declaration `int DoGetPerim'
main.cpp:141: conflicts with function declaration `void DoGetPerim(...)'

make.exe: *** [main.o] Error 1

Ausführung beendet




Ja ich bin Noob, also welchen total blöden Fehler habe ich gemacht? Oder braucht iht mehr Infos? :o

tuxipuxi
15-09-2003, 19:40
noe,

ich habe dir schon eine ausfuehrliche antwort gegeben.. aber du musstest ja loeschen :mad: .


die einzige fehlermeldung die mein gehirn zu deinem problem ausspuckt ist:

stupid compiler detected on stupid system.

loesungsvorschlag:

ordentlichem compiler benutzen, compilerhandbuch zum jetzigen lesen.

der code, den ich dir gepostet hab und den du ja zeigst, ist einwandfrei( jedenfalls aus compilersicht ) und dein problem ist nicht der code, sondern das drumherum

arthur
16-09-2003, 10:08
@tuxi:
wie beim führerschein: vorsicht, rücksicht und NACHSICHT
der compiler ist schon gut genug => gcc

@lacsa:
ich vermute mal es liegt an dem Namen der Klasse 'Rectangle'
windows besitzt auch eine eigene Funktion mit diesem Namen.
also entweder du benennst die Klasse anders oder => namespaces

gruss
Arthur

lacsap
16-09-2003, 12:57
Original geschrieben von tuxipuxi
noe,

ich habe dir schon eine ausfuehrliche antwort gegeben.. aber du musstest ja loeschen :mad: .


die einzige fehlermeldung die mein gehirn zu deinem problem ausspuckt ist:

stupid compiler detected on stupid system.

loesungsvorschlag:

ordentlichem compiler benutzen, compilerhandbuch zum jetzigen lesen.

der code, den ich dir gepostet hab und den du ja zeigst, ist einwandfrei( jedenfalls aus compilersicht ) und dein problem ist nicht der code, sondern das drumherum

@tuxipuxi

nicht böse sein ;) wie du oben entnehmen kannst sind deine Lösungvorschläge bereits miteingearbeitet!

Es wahren 2 Schreibfehler, DoDrawRec(t) und Chang(c)eDimensions, du hast mir schon geholfen, hab mich auch bedankt und tue dies hier nocheinmal -> Dankeschön! (Nicht böse sein ;))

Leider bekomme ich noch immer 32 Fehler ;)

lacsap
16-09-2003, 13:03
Original geschrieben von arthur
@tuxi:
wie beim führerschein: vorsicht, rücksicht und NACHSICHT
der compiler ist schon gut genug => gcc

@lacsa:
ich vermute mal es liegt an dem Namen der Klasse 'Rectangle'
windows besitzt auch eine eigene Funktion mit diesem Namen.
also entweder du benennst die Klasse anders oder => namespaces

gruss
Arthur


Danke das war es, hab Rectangle in Rechteck umgewandelt und es klappt! Nur wie soll ein noob dadrauf kommen, habs ja abgetippt...

tuxipuxi
16-09-2003, 13:35
da kannst du wirklich nichts fuer, wenn deine entwicklungsumgebung mit irgendwelchen includes compilet.
wenn du es naemlich ganz normal nur mit standardincludes( also nur die, die du auch brauchst: iostream, stdlib ) wuerde dass nicht kommen. dev-cpp hat scheinbar mit windowsspezifischen includes compilet ...

Berufspenner
16-09-2003, 13:51
dev-cpp hat scheinbar mit windowsspezifischen includes compilet ..Aber scheinbar nur, weil er ein neues Projekt unter Dev-Cpp gestartet hat. Als ich es eben als einzellne Datei kompiliert hatte, funktionierte es auf Anhieb.

Cu
André