Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
08.04.2002, 16:45
Sonium



Ziel des ganzen sollte eine Funktion die einen Würfel zeichnet (wie sie das macht ist erstmal unwichtig) Zur Beschreibung der Eckpunkte habe ich die Klasse Point deklariert. Anschließend sollen der Funktion dann zwei Points übergeben werden (Mittelpunkt und Eckpunkt).

Quellcode:
class Point
{
private:
    float itsX;
    float itsY;
    float itsZ;
public:
    Point(float X, float Y, float Z);                    ~Point () {}                                        

    float getX() const {return itsX;}
    float getY() const {return itsY;}
    float getZ() const {return itsZ;}
};

Point::Point(float X, float Y,float Z)
{
    itsX = X;
    itsY = Y;
    itsZ = Z;
}

void drawCube(Point Middle(float X, float Y, float Z), Point Corner(float X, float Y, float Z))
{
    MiddleX = Middle.GetX();

             //error C2065: 'MiddleX' : nichtdeklarierter Bezeichner

    //OpenGL Code
}

warum geht das so nicht und wie gehts dann?

--

---------------------------------
www.killerlevels.de Editing mit Quake III Arena, Urban Terror, Elite Force

zum Seitenanfang zum Seitenende Profil || Suche
001
08.04.2002, 17:11
Kriz



Quellcode:void drawCube(Point Middle[color="#FF0000"](float X, float Y, float Z)[/color], Point Corner[color="#FF0000"](float X, float Y, float Z)[/color]){
    MiddleX = Middle.GetX();
             //error C2065: 'MiddleX' : nichtdeklarierter Bezeichner
    //OpenGL Code}

Wenn du der Funktion Objekte vom Typ Point übergibst, darfst du nur den Variablennamen angeben. Das bedeutet, daß die Punkte für jedes Objekt bereits VOR dem Funktionsaufruf feststehen sollten, da sie im Objekt selber ja drin sind. Außerdem solltest du zu übergebene Klassenobjekte IMMER als konstante Referenz übergeben, wenn du sie nicht innerhalb der Funktion noch verändern willst. Deine Klasse Point würde zwar auch so funktionieren wie jetzt, aber spätestens bei einem vorhandenen Kopierkonstruktor von Point gäbe es gewaltige Probleme!

Außerdem ist MiddleX nicht innerhalb der Funktion oder als globales Objekt definiert worden, also kennt der Compiler MiddleX auch nicht o_O

Desweiteren gibt es die Methode GetX() nicht, sondern nur getX(). Kennst du deinen eigenen Code nicht?

Schreib also folgendes:
Quellcode:void drawCube(const Point &Middle, const Point &Corner)
{
    float MiddleX = Middle.getX();
    // OpenGL Code
}

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)


Dieser Beitrag wurde am 08.04.2002 um 17:15 von Kriz bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
08.04.2002, 17:47
Prefect



Also, wenn ich ernsthaft programmieren würde würde ich diesen ganzen OOP-Abstraktionskäse erstmal vergessen.

Ein Punkt ist ein Punkt.

Das war schon immer so, und da wird sich auch dann nichts dran ändern wenn Microsoft anfängt, "MS Point Solutions" rauszubringen.

Und da wir (hoffentlich) alle wissen, was ein Punkt denn nun wirklich ist, kann man sich den ganzen Käse mit Daten verstecken und so auch sparen.

Hier mal eine Version deines Codes mit mehr gesundem Menschenverstand (ich beschuldige dich nicht, denn auf das Theoriegeschwafel fallen viele rein):

Quellcode:
class Point {
public:
    float x, y, z;
public:
    Point(float sx, float sy, float sz) : x(sx), y(sy), z(sz) { }
    // Destruktor ist sinnlos
};

void drawCube(const Point *middle, const Point *corner)
{
    float mx = middle->x;

    //OpenGL Code
}

Alternativ kannst du statt Pointern von mir aus auch Referenzen (also * statt &) verwenden, aber ich weiß halt gerne wann ich einen Pointer vorliegen hab und wann nicht.

Wie du siehst, ist die Point-Klasse auf ein venünftiges Minimum reduziert worden. Im Endeffekt würde sogar eine C-like Struktur ohne Ctor ausreichen. Die Verwendung von C++-Stil kann aber ganz nützlich sein für Operator-Overloads (point1 + point2 und so).

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
003
08.04.2002, 21:07
Sonium



thx... ich werde mir Perfects Ratschlag zu Herzen nehmen.
Noch eine kleine Frage @Perfect: warum verwendest du zweimal public?

--

---------------------------------
www.killerlevels.de Editing mit Quake III Arena, Urban Terror, Elite Force

zum Seitenanfang zum Seitenende Profil || Suche
004
08.04.2002, 22:53
Kriz



Hm BlackAvenger, wenn du Prefis in meinen Augen "komische Klasse" dann kannst du auch gleich schreiben (C++ only aber):
Quellcode:struct Point
{
    float x, y, z;

    Point(float sx = 0.0f, float sy = 0.0f, float sz = 0.0f) : x(sx), y(sy), z(sz) { }
};

void drawCube(const Point *middle, const Point *corner)
{
    float mx = middle->x;    //OpenGL Code
}

Weil Prefis Klasse eh public ist und daher sinnlos wird, wenn alles von außen zugreifbar wird...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)


Dieser Beitrag wurde am 08.04.2002 um 22:54 von Kriz bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
08.04.2002, 22:59
dp
Administrator


Zitat:
Prefect postete
Alternativ kannst du statt Pointern von mir aus auch Referenzen (also * statt &) verwenden, aber ich weiß halt gerne wann ich einen Pointer vorliegen hab und wann nicht.

* statt &?

O_o
nicht andersrum?

btw ich mag pointer auch lieber :)

--

zum Seitenanfang zum Seitenende Profil || Suche
006
08.04.2002, 23:16
TheTinySteini



Ha! Ich finde, dafür muss uns Prefect erstmal ein Eis spendieren =)

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
007
09.04.2002, 13:02
Mazze



Hm?
Stimmt doch.....

void Printx(int *x); // Pointer
void Printx(int &x); // Referenz

Shit.....stimmt ja.
Er meint ja statt Pointer Referenzen...vergesst den Post!

--

BattleTech-MOD:
http://bthl.unitedgaming.net/


Dieser Beitrag wurde am 09.04.2002 um 13:02 von Mazze bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
09.04.2002, 14:15
Prefect



Also zunächstmal wrt public-Klasse: es ist halt irgendwie sinnlos, eine Funktion getX zu schreiben, weil dadurch nur der Code aufgebläht wird. Wenn es außerdem keinen Grund gibt, Member zu verstecken, dann sollte man dies auch nicht tun, d.h. man sollte die Daten public machen.
Wer mal meinen Code gelesen hat wird sehen, daß ich private und protected eh nur spärlich verwende. Und man sollte meistens nur dann nicht direkt darauf zugreifen wenn die Variablen offensichtlich komplexere Zusammenhänge untereinander haben. Wenn ich z.B. zwei Membervariablen m_pPrev und m_pNext habe sollte eigentlich klar sein, daß man mit denen nicht direkt rumpfuscht ohne genau in den Code reinzuschauen. Und wenn's eine Membervariable m_bCanFocus gibt, dann ersieht man an der Memberfunktion SetCanFocus(), daß man sie nicht direkt setzen sollte. In so Fällen mach ich die Variable oft auch private, aber halt nicht immer.

Ist ne Stilfrage, aber ich bring's als C-Programmierer im allgemeinen nicht übers Herz, Memberfunktionen in eine struct zu packen ;)

Zweimal public ist ebenfalls ne Frage des Stils. Durch das zweite public werden halt die Daten von den Funktionen getrennt, das macht den Code IMO übersichtlicher.

dp kriegt ein Eis, weil er den Fehler entdeckt hat. Alle anderen kriegen nix >:P

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
009
09.04.2002, 18:55
Another1



schade

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
010
09.04.2002, 19:03
Kriz



Prefi hat überhaupt kein Eis! Das braucht alles sein Tux in seiner virtuellen Antarktisumgebung >;P

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
011
09.04.2002, 19:18
mani



>:O glück gehabt kriz; in der antarktis gibts pinguine :-)

--

zum Seitenanfang zum Seitenende Profil || Suche
012
09.04.2002, 19:26
Kriz



jc, das weiß ich! Darum ja auch ANTarktis und nicht Arktis...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
013
09.04.2002, 21:07
dp
Administrator


O_o
ich will mein eis!

--

zum Seitenanfang zum Seitenende Profil || Suche
014
10.04.2002, 13:27
Prefect



Hmm, ich dachte, ich könnte das jetzt unter den Tisch fallen lassen...
Wie könnte ich mich da jetzt noch rausreden?

Ach ja, ich hab hier mein Fagott stehen... mit dem spiele ich hiermit Eis (E#) für dp ;p
/me schleckt nun erstmal weiter am leider nicht existenten (Speise-)Eis ;)

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
015
10.04.2002, 13:48
TheTinySteini



Na, dann kannste ja ruhig ein E-is für alle spielen. Dann kriegste sogar nen fetten E-is-Akkord von meiner Gitarre zurück =)

Womit auch dieser Thread endlich komplett Offtopic wäre...

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
016
10.04.2002, 15:38
Kriz



Um was ging es überhaupt? Schon wieder alles vergessen =)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
017
10.04.2002, 16:38
WareWolf



@TTT: E-is-Akkord?
also auf meiner Klampfe habe ich keinen Halbton zwischen E und F (he he)...dann schon eher einen tiefer, aber dann ist es ein D-is, aber egal ;)

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
018
10.04.2002, 17:18
Another1



E-is is quasi F, weil E->F halbton

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
019
10.04.2002, 21:11
TheTinySteini



Eben. Ob nun E-is oder F is FAST egal. Es ist net wirklich egal, wie dieser Zeit-Artikel http://www.zeit.de/2002/15/wohltemperiert beweist, aber bei Klavier und Gitarre geht's net anders.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
020
10.04.2002, 21:55
WareWolf



ja ja ja, aber wer bezeichnet schon ernsthaft ein F als E-is. Da könnte ich ja auch ein E zum F-es machen. Mathematisch das selbe. (Jetzt ist es endgültig offtopic)

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
021
10.04.2002, 23:33
Another1



ja, es ist nur fast dasselbe, daher mein quasi.
man bezeichnet ein F nicht als E-is, man bezeichnet einfach ein E# als E-is, WareWolfli =), weil man nunmal an jeden Ton ein Kreuz (oder auch 2 wers brauch =) anfügen kann. genauso wie auch ein b (.. oder auch 2), daher muss es nunmal irgendnen namen bekommen

--

Another1

...relaxing..atm =)
... und Schweiz suckt!


Dieser Beitrag wurde am 10.04.2002 um 23:34 von Another1 bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
022
11.04.2002, 13:44
TheTinySteini



Es hat nicht wirklich jemand den Artikel gelesen, den ich verlinkt hab? Da is genau beschrieben, warum es eben NICHT das gleiche ist. Hier, der wichtige Absatz:

Zitat:
Dass eine physikalisch wirklich "reine" Stimmung von Instrumenten unmöglich ist, lässt sich leicht ausrechnen. Das einzige unproblematische, aber auch das langweiligste Intervall ist die Oktave. Sie entsteht, wenn man die Frequenz eines Tons verdoppelt. Das nächstharmonische Intervall, auf dem die griechischen Pythagoräer ihr Tonsystem aufbauten, ist die Quinte - bei ihr verhalten sich die Tonfrequenzen wie drei zu zwei.

Aber schon wenn mehrere Quinten aufeinander getürmt werden, ist es aus mit der Harmonie. Geht man vom mittleren C aus und macht sechs Quintenschritte nach oben, dann landet man beim Ton Fis. Vom gleichen C aus sechs Quintenschritte nach unten ergeben ein sehr tiefes Ges. Auf einer Klaviertastatur gibt es keinen Unterschied zwischen Fis und Ges, die beiden Töne müssten exakt sieben Oktaven voneinander entfernt sein. Ihre Frequenzen müssten rechnerisch also um den Faktor 2^7 = 128 auseinander liegen. Berechnet man aber den Abstand zwischen dem hohen Fis und dem tiefen Ges aus den zwölf reinen Quinten, so ergibt sich ein Frequenzverhältnis von 312/212 = 129,75 - also etwas mehr, als sich aus den sieben Oktaven ergibt. Gute Bläser, Streicher und Sänger gleichen die Frequenzunterschiede intuitiv aus. Tasteninstrumente dagegen sind fest gestimmt. Sie lassen sich also auf der Basis von reinen Quinten nicht stimmen. Man muss ein bisschen "pfuschen", um die Differenz, auch "pythagoräisches Komma" genannt, zu korrigieren.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy


Dieser Beitrag wurde am 11.04.2002 um 13:45 von TheTinySteini bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
023
11.04.2002, 15:25
Prefect



Gah, von dem pythagoräischen Komma hab ich schon langsam genug, damit nervt meine Musiklehrerin (so eine uralte Zwergin, die zum Glück nicht Orchester- sondern Chorleiterin ist) schon das ganze Schuljahr...

Aber selbst ohne dieses Ding würde es in manchen Fällen Sinn machen, von E# zu sprechen und nicht von F, weil man dann evtl. leichter mit den ganzen Dreiklang/Akkord-Systemen rumoperieren kann - immerhin erkennt man bei E# sofort, daß es halt eine übermäßige Terz zum C sein soll; wenn da ein F stünde wär's harmonisch nicht so klar.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
024
12.04.2002, 00:21
Another1



ich hab mich evtl. unklar ausgedrückt, aber des was der artikel da sagt wollte ich letztendlich mit dem 'quasi' ausdrücken
naja, unser Tonsystem is nunmal ein feiner HACK!HACK!

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche