0
광선 추적 프로젝트를 개발 중입니다. 그래서 저는 많은 벡터 연산을합니다. 제품 조작을 위해, 나는 연산자 오버로딩을 사용하고 문제에 직면했다. 아래의 세부 정보를 볼 수 있습니다 :오류 C2666 유사한 오버로딩
이 기능은 내가 Func 2
를 추가 할 경우 RayMath.h
//GENERAL INLINES
inline Vector operator*(float c, const Vector& v){ return v * c; } //Func1
inline Vector operator*(const Vector& v1, Vector& v2) { return Vector(v1.x * v2.x, v1.y * v2.y, v1.z * v2.z); } //Func 2
라는 이름의 헤더 파일에, 그것은 Func1
을 사용하는 작업에 대한 C2666, more than one operator
준다. Func 2
을 입력하지 않으면 no operator matches
오류가 발생합니다. 다음은 사용 예는 다음과 같습니다
이 라인은 Renderer.cpp
Vector R = ray.direction - 2.f * Dot(ray.direction, N) * N; //Func1 related
color += trace( Ray((intersectionP + R * EPSILON), R)) * sphere->surfaceColor * sphere->reflection; // Func 2 related
라는 이름의 .cpp
파일에있는 나는 당신의 도움을 주셔서 감사드립니다!
아마도 Vector :: Vector (float) 생성자가 있을까요? – Inspired
짐작하겠습니다. 당신은 또한 과부하'operator * (const Vector &, float)'와 비 명시 적 생성자'Vector :: Vector (float)'를 가지고 있습니다. 권리? – Angew
예,이'Vector (float xVal) : \t x (xVal), y (xVal), z (xVal) {}'생성자가 있습니다. 이 문제가 발생합니까? – ciyo