不匹配调用函数 C++
No match for call to function C++
我正在尝试编写 raytracer,但由于以下错误而无法编译我的程序:
src\util\Ray.cpp: In constructor 'Ray::Ray()': src\util\Ray.cpp:8:17:
error: no match for call to '(Vector3D) (double, double, double)'
o(0.0, 0.0, 0.0);
^ makefile.mak:31: recipe for target 'Ray.o' failed mingw32-make: *** [Ray.o] Error 1
这是代码:
//Vector3D.h
#ifndef __VECTOR3D__
#define __VECTOR3D__
class Vector3D{
public:
float x;
float y;
float z;
public:
Vector3D(void);
Vector3D(const float&, const float&, const float&);
Vector3D(const Vector3D& obj);
};
#endif
//Vector3D.cpp
#include <iostream>
#include "Vector3D.h"
using namespace std;
Vector3D::Vector3D(void){
x = 0.0;
y = 0.0;
z = 0.0;
}
Vector3D::Vector3D(const float &p_x, const float &p_y, const float &p_z){
x = p_x;
y = p_y;
z = p_z;
}
Vector3D::Vector3D(const Vector3D& obj){
x = obj.x;
y = obj.y;
z = obj.z;
}
//Ray.h
#ifndef __RAY__
#define __RAY__
#include "Vector3D.h"
class Ray{
public:
Vector3D o;
Vector3D d;
public:
Ray(void);
};
#endif
//Ray.cpp
#include "Ray.h"
Ray::Ray(void){
o(0.0, 0.0, 0.0);
}
我不知道这里出了什么问题,有人可以解释一下吗?
当您到达构造函数的主体时,所有成员都已初始化。这意味着在您的 Ray
构造函数中:
Ray::Ray(void){
o(0.0, 0.0, 0.0);
}
行 o(0.0, 0.0, 0.0);
等同于 o.operator()(0.0, 0.0, 0.0)
.
要为成员调用非默认构造函数,您需要使用初始化列表:
Ray::Ray() : o(0.0, 0.0, 0.0) {
// note the body of the constructor is now empty
}
我正在尝试编写 raytracer,但由于以下错误而无法编译我的程序:
src\util\Ray.cpp: In constructor 'Ray::Ray()': src\util\Ray.cpp:8:17: error: no match for call to '(Vector3D) (double, double, double)'
o(0.0, 0.0, 0.0); ^ makefile.mak:31: recipe for target 'Ray.o' failed mingw32-make: *** [Ray.o] Error 1
这是代码:
//Vector3D.h
#ifndef __VECTOR3D__
#define __VECTOR3D__
class Vector3D{
public:
float x;
float y;
float z;
public:
Vector3D(void);
Vector3D(const float&, const float&, const float&);
Vector3D(const Vector3D& obj);
};
#endif
//Vector3D.cpp
#include <iostream>
#include "Vector3D.h"
using namespace std;
Vector3D::Vector3D(void){
x = 0.0;
y = 0.0;
z = 0.0;
}
Vector3D::Vector3D(const float &p_x, const float &p_y, const float &p_z){
x = p_x;
y = p_y;
z = p_z;
}
Vector3D::Vector3D(const Vector3D& obj){
x = obj.x;
y = obj.y;
z = obj.z;
}
//Ray.h
#ifndef __RAY__
#define __RAY__
#include "Vector3D.h"
class Ray{
public:
Vector3D o;
Vector3D d;
public:
Ray(void);
};
#endif
//Ray.cpp
#include "Ray.h"
Ray::Ray(void){
o(0.0, 0.0, 0.0);
}
我不知道这里出了什么问题,有人可以解释一下吗?
当您到达构造函数的主体时,所有成员都已初始化。这意味着在您的 Ray
构造函数中:
Ray::Ray(void){
o(0.0, 0.0, 0.0);
}
行 o(0.0, 0.0, 0.0);
等同于 o.operator()(0.0, 0.0, 0.0)
.
要为成员调用非默认构造函数,您需要使用初始化列表:
Ray::Ray() : o(0.0, 0.0, 0.0) {
// note the body of the constructor is now empty
}