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...
}