Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DJSebi

Frischling

  • »DJSebi« ist der Autor dieses Themas

Beiträge: 19

Wohnort: KÖLN!!!!!

Beruf: Musiker, Informatiker, DJ, Moderator

  • Private Nachricht senden

1

06.10.2007, 17:03

Error C2039

Hallo zusammen,

ich habe folgendes Problem beim Zugriff auf eine Methode in meiner Vector3-Class:
Kompeiler meldet: camera.cpp(9) : error C2039: 'cross' : is not a member of 'Vector3'

Vector3.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Vector3
{
  ..
  friend Vector3 cross( const Vector3& v1, const Vector3& v2 );
  ..
}

inline Vector3 cross( const Vector3& v1, const Vector3& v2 )
{
    Vector3 temp;

    temp.e[0] = v1.y() * v2.z() - v1.z() * v2.y();
    temp.e[1] = v1.z() * v2.x() - v1.x() * v2.z();
    temp.e[2] = v1.x() * v2.y() - v1.y() * v2.x();

    return temp;
}


die cross-Methode wird von der Klasse Camera im Konstruktor aufgerufen:
Camera.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Camera::Camera( Vector3 place, Vector3 up, Vector3 mov, int width, int height, float angel )
{
    G       = mov - place;
    dist    = G.length();

    screenX.cross( G, up );            // <-- Error C2039

    screenX.makeUnitVector();
    screenY.cross( screenX, G );    // <-- Error C2039

    screenY.makeUnitVector();

    float verhaeltnis = ( float )( width / height );
    vfov    = angel / verhaeltnis;
    hfov    = angel;

    mx      = ( float )( ( 2 * dist ) * ( hfov / width ) );
    my      = ( float )( ( 2 * dist ) * ( vfov / height ) );
    screenX = screenX * mx;
    screenY = screenY * my;

    F       = G - screenX * ( float )( width / 2 ) + screenY * ( float )( height / 2 );
}


Jetzt ist die Frage, muss in einer der Klassen der Befehl "friend" stehen?
Das ganze ist für einen RayTracer gedacht.

Danke schonmal für die Hilfe!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

06.10.2007, 17:28

screenX = cross( G, up ); // <-- Error C2039
screenX.makeUnitVector();
screenY = cross( screenX, G ); // <-- Error C2039
screenY.makeUnitVector();

schon das versucht? Und eigentlich sagt er doch was Sache ist.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

DJSebi

Frischling

  • »DJSebi« ist der Autor dieses Themas

Beiträge: 19

Wohnort: KÖLN!!!!!

Beruf: Musiker, Informatiker, DJ, Moderator

  • Private Nachricht senden

3

06.10.2007, 17:42

Danke. Hat geklappt.

Das einzige was der mir nur dazu sagte, warr der Fehler, wie o.g. und dass ich in die Vector3.h schauen sollte.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

06.10.2007, 17:44

Zitat von »"DJSebi"«


Das einzige was der mir nur dazu sagte, warr der Fehler, wie o.g. und dass ich in die Vector3.h schauen sollte.


So ist es! Das genügt doch?!
@D13_Dreinig

Werbeanzeige