对c++函数的调用不匹配

No match for call to function C++

本文关键字:调用 不匹配 函数 c++      更新时间:2023-10-16

我正在尝试编程一个光线追踪器,我不能编译我的程序,因为以下错误:

srcutilRay.cpp:在构造函数'Ray::Ray()'中:srcutilRay.cpp:8:17:错误:没有匹配调用'(Vector3D) (double, double, double)'
0 (0.0, 0.0, 0.0);^ makefile。马克:31:目标射线的配方。o'失败的mingw32-make: ***[雷。0]错误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
}