C++ 错误:对‘;的调用没有匹配函数_3DVec::_3DVec()’;

C++ 错误:对‘;的调用没有匹配函数_3DVec::_3DVec()’;,c++,c++11,constructor,C++,C++11,Constructor,我无法正确获取此构造函数(RMatrix.class.h): 我的主文件有: #include <iostream> #include <math.h> #include "classes/Color.class.h" #include "classes/Vector.class.h" #include "classes/RMatrix.class.h" int main () { // ... } 谢谢编译器告诉您,在代码中的某个地方需要\u 3DVec类的

我无法正确获取此构造函数(
RMatrix.class.h
):

我的主文件有:

#include <iostream>
#include <math.h>
#include "classes/Color.class.h"
#include "classes/Vector.class.h"
#include "classes/RMatrix.class.h"

int main () {
    // ...
}

谢谢

编译器告诉您,在代码中的某个地方需要
\u 3DVec
类的默认构造函数。类
\u 3DVec
没有默认构造函数。因此出现了错误

在您发布的代码中,
RMatrix
成员
right
up
out
默认由
RMatrix
构造函数构造。因此,这正是需要默认构造函数的地方

我可以猜测构造函数参数应该用作向量的初始值设定项,如

 RMatrix (_3DVec& Wup, _3DVec& Out, double Spin) : up(Wup), out(Out) {
    // stuff...
 }
上面通过复制构造
up
out
来处理
up
out
,但仍然保留您的
右侧
默认构造。这仍然是一个猜测。只有您知道类成员应该如何初始化


S.Note也指出,在C++语言中,从<代码> > <代码>开始的全局命名空间名称被保留到实现。不允许在全局命名空间中使用此类名称。

听起来好像您还没有定义默认构造函数。向我们展示
RMatrix.h
文件,并向我们展示构造
RMaxtrix
实例的代码。我还没有构造任何RMatrix实例。@Julien:不管你是否真的在构造它。您编写了
RMatrix
构造函数,它试图隐式调用
\u 3DVec
的默认构造函数。编译器无法编译此代码,因为所需的默认构造函数不存在。您必须重写
RMatrix
构造函数,这样它就不会尝试默认构造
\u 3DVec
。为什么在_3DVec类(会说话的_3DVec构造函数)内进行相同的实例化时不会引发错误?例如:
\u 3DVec(const\u 3DVec&vertexFrom,const\u 3DVec&vertexTo){…}
编译器说错误就在RMatrix构造函数所在的那一行。我想我现在明白了,谢谢。我想把3DVec传递给矩阵的构造函数。为什么我需要一个默认的构造函数呢?@Julien:太好了。但按照现在的编写方式,必须将构造函数参数复制到类成员中。上面的示例演示了如何使用复制构造函数复制它们。但是,这仅包括
up
out
。我不知道你打算用
up
做什么。更正:我不知道你打算用
right
做什么。我可以通过在向量类中添加一个空的
\u 3DVec(){}
构造函数来解决这个问题。
class RMatrix {

private:

    _3DVec right;
    _3DVec up;
    _3DVec out;
    double spin;
    double MData[16];


public:

    RMatrix (_3DVec& Wup, _3DVec& Out, double Spin) {
        // stuff...
    }
}
 RMatrix (_3DVec& Wup, _3DVec& Out, double Spin) : up(Wup), out(Out) {
    // stuff...
 }