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!