PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++]: Einfaches Beispiel compiliert nicht, bin am Verzweifeln


mf_2
2010-03-15, 22:32:15
Hallo zusammen,

im C++ Kurs an der Hochschule haben wir heute ein Programm erstellt, welches uns das Konzept der Objektorientierung in dieser Sprache zeigen soll. Es hat folgende Dateien:

Rectangle.h

class CRectangle
{
// standardmäßig: private
unsigned short x, y;
unsigned short width, height;

public: // damit von außen zugreifbar
void SetPos(unsigned short x, unsigned short y);
void SetDim(unsigned short width, unsigned short length);

unsigned int GetArea();
}


Rectangle.cpp

#include "Rectangle.h"

void CRectangle::SetPos(unsigned short x, unsigned short y)
{
this->x = x;
this->y = y;
}

void CRectangle::SetDim(unsigned short width, unsigned short length)
{
this->width = width;
this->height = height;
}

unsigned int CRectangle::GetArea()
{
return this->height*this->width;
}


main.cpp:

#include "Rectangle.h"
#include <iostream>

using namespace std;

int main()
{
CRectangle myRect;

myRect.SetPos(1, 1);
myRect.SetDim(2, 3);

cout << "Flaecheninhalt: " << myRect.GetArea() << endl;
system("pause");

return 0;
}


So weit sieht das eigentlich alles ganz gut aus, aber beim Compilieren in Visual Studio bekomme ich immer folgende Fehler:

c:\program files (x86)\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) :
error C2628: 'CRectangle' followed by 'unsigned' is illegal (did you forget a ';'?)
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) :
error C2628: 'CRectangle' followed by 'int' is illegal (did you forget a ';'?)
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) :
error C2347: '__w64' : can not be used with type '__w64 CRectangle'
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) :
error C2371: 'size_t' : redefinition; different basic types
1> c:\...\visual studio 2008\projects\dhbw übungen 1\dhbw übungen 1\predefined c++ types (compiler internal)(19) :
see declaration of 'size_t'
1>Rectangle.cpp
1>c:\...\visual studio 2008\projects\dhbw übungen 1\dhbw übungen 1\rectangle.cpp(5) :
error C2628: 'CRectangle' followed by 'void' is illegal (did you forget a ';'?)
1>c:\...\visual studio 2008\projects\dhbw übungen 1\dhbw übungen 1\rectangle.cpp(6) :
error C2556: 'CRectangle CRectangle::SetPos(unsigned short,unsigned short)' :
overloaded function differs only by return type from 'void CRectangle::SetPos(unsigned short,unsigned short)'
1> c:\...\visual studio 2008\projects\dhbw übungen 1\dhbw übungen 1\rectangle.h(10) :
see declaration of 'CRectangle::SetPos'
1>c:\...\visual studio 2008\projects\dhbw übungen 1\dhbw übungen 1\rectangle.cpp(6) :
error C2371: 'CRectangle::SetPos' : redefinition; different basic types
1> c:\...\visual studio 2008\projects\dhbw übungen 1\dhbw übungen 1\rectangle.h(10) :
see declaration of 'CRectangle::SetPos'


Ich habe die Schuld zuerst auf die Beta von Visual Studio 2010 geschoben und nun extra das VS 2008 installiert, aber die Fehler sind nach wie vor da. Der Error-Log ist aus dem VS 2008.
Was mache ich da falsch?
Und warum meckert er in einer sourceannotations-Datei? Das ist ja nicht eine von mir erzeugte Datei.

Gruß,
mf_2

maximAL
2010-03-15, 22:48:40
1>c:\...\visual studio 2008\projects\dhbw übungen 1\dhbw übungen 1\rectangle.cpp(5) :
error C2628: 'CRectangle' followed by 'void' is illegal (did you forget a ';'?)

Da ist schonmal ein offensichtliches Problem.

mf_2
2010-03-15, 22:57:05
Genau diesen Fehler verstehe ich nicht. Warum darf die Methode nicht void zurückgeben? Sie hat ja kein return. Oder verstehe ich die Meldung falsch?

pest
2010-03-15, 23:02:47
da gehört nen ";" unter deine Klassendef! in Rectangle.h

mf_2
2010-03-15, 23:07:00
Ahhhh!! Super, danke! :D

Coda
2010-03-15, 23:17:49
Klassen und Strukturen müssen in C++ mit ; abgeschlossen werden, weil dort eigentlich auch gleich Deklarationen durchgeführt werden können.

class CRectangle
{
// standardmäßig: private
unsigned short x, y;
unsigned short width, height;

public: // damit von außen zugreifbar
void SetPos(unsigned short x, unsigned short y);
void SetDim(unsigned short width, unsigned short length);

unsigned int GetArea();
};

Das passiert mir aber auch immer noch manchmal. Kein Grund zur Sorgen

Neomi
2010-03-15, 23:41:20
Ganz wichtig ist, daß du lernst, dir in solchen Fällen selbst zu helfen. Wenn du die Sprache offenbar noch nicht kannst, warum vermutest du bei einer Fehlermeldung einen Fehler im Compiler? Die sind so ausgereift, daß du da einen findest ist extrem unwahrscheinlich. Schon gar nicht mit so einem Miniprogramm.

Nachdem die sehr präzise Fehlermeldung (did you forget a ';'?) dich nicht auf die Lösung gebracht hat, hättest du auch die Hilfe oder zumindest Google bemühen können. Bei der Suche nach "C2628" (der Fehlernummer) ist das hier gleich der erste Treffer:

http://msdn.microsoft.com/en-us/library/khy6tfd2%28VS.71%29.aspx

Darin ist auch wunderbar kommentiert, wo jetzt ein Semikolon hingehört.

PS: ist nicht böse gemeint, jeder hat mal klein angefangen. Ich halte es bloß für sinnvoller, Wege zur Findung von Lösungen zu vermitteln, als nackte Lösungen alleine. ;)

mf_2
2010-03-16, 00:23:20
Prinzipiell suche ich den Fehler natürlich auch zuerst bei mir, aber es wird ja auch von allen Seiten (zurecht) gesagt, dass man Beta-Versionen von IDEs nicht zur produktiven Entwicklung einsetzen soll. Deswegen wollte ich auf Nummer sicher gehen und habe die Final von VS 2008 installiert.

Ein Semikolon habe ich durchaus gesucht, aber eben eher in den Zeilen 5 und 6 und nicht am Ende der Klassendefintion.

Coda
2010-03-16, 00:26:42
Neomi normal stimme ich dir hundertprozentig zu, aber ich weiß noch, dass ich mindestens einmal genau diesen Fehler ewig gesucht habe.

Und die Fehlermeldung ist wirklich etwas verwirrend.

Gast
2010-03-17, 01:30:57
Prinzipiell suche ich den Fehler natürlich auch zuerst bei mir, aber es wird ja auch von allen Seiten (zurecht) gesagt, dass man Beta-Versionen von IDEs nicht zur produktiven Entwicklung einsetzen soll.

1.) Normal sollte man im Produktivbetrieb generell keine Betas einsetzen ;-)

2.) Selbst bei einer Beta sollte der Compiler seine Grundaufgaben schon halbwegs erfüllen. Da brauchst du dir keine Sorgen machen, vor allem bei bestehenden Funktionen.

3.) Das Problem bei Beta Versionen von Visual Studio ist meistens der Installer bzw. der Installer des .NET Frameworks. Dieser funktioniert nämlich bei einer Beta üblicherweise wirklich noch nicht zuverlässig. Wenn man während der Installation auf Abbrechen geht oder der Installer mit einem Fehler abbricht (warum auch immer), ist es oft der Fall, dass das .NET Framework dann halb oben ist und mit einem PC ohne .NET Framework kann man nicht mehr viel anstellen. Ich habe das Problem schon 2 mal gehabt. Einmal daheim mit der Visual Studio 2008 Beta 2 (bzw. Deinstaller von der Beta 1). Da hat dann nur mehr eine Neuinstallation geholfen und einmal in der Arbeit beim .NET Framework 3.5 SP1 Beta. Da habe ich übersehen, das das noch Beta ist, wie ich es gesehen habe, wollte ich abbrechen und auch da nichts mehr machbar außer Systemwiderherstellung.

Gast
2010-03-17, 01:32:42
Edit:
4.) In der Regel wird bei Betas auch relativ wenig Wert darauf gelegt, dass man die erstellten Projekte dann auch in die Releaseversion konvertieren kann. Wenn es passt, dann hat man Glück gehabt. Wenn jedoch nachträglich noch etwas geändert wurde, dann hat man meistens Pech gehabt.