当我尝试以下操作时,我的C ++编译器给我一个错误“类Foo不存在默认构造函数”。
MyClass :: MyClass(const Foo&foo){...}
如果我传递了一个引用,则该对象应该已经初始化了,对吗?复制构造函数也不是问题,因为我明确定义了一个。那么,为什么需要一个默认的构造函数来传递引用呢?
我唯一能想到的就是它可能不知道要为其分配多少内存。如果那是问题,是否有办法告诉编译器我只打算动态分配此对象?我目前无法在网上找到任何答案,非常感谢您的帮助。
编辑:我只是要在我的实际代码中进行编辑。
MemberManager.cpp:
#include "MemberManager.h"
MemberManager::MemberManager(const NodeManager& nodeSet, std::vector<int> cctMat, int n)
{
for(int i = 0; i < n; i++)
{
memSet[i] = Member();
}
}
节点管理器
#include "Node.h"
class NodeManager
{
public:
//constructors
NodeManager(std::vector<double> crdMat, std::vector<Constraint> cstMat, int n):
nodeSet(n) {};
//copy
NodeManager(const NodeManager& src):
nodeSet(src.nodeSet) {};
}
我的确切错误消息是MemberManager :: MemberManager(...)的第一个主体括号下的红色下划线,它说NodeManager没有默认的构造函数。这是我的意图,但是我不明白为什么它需要默认的构造函数。
您不需要默认的构造函数即可通过引用传递对象。您的代码必须在做其他需要这种事情的事情。
我的猜测是MyClass
有一个type的成员Foo
。如果它不是默认可构造的,则需要在其声明中或在构造函数的初始化程序列表中进行初始化:
MyClass::MyClass(const Foo& foo) : foo(foo) { ... }
^^^^^^^^
initialiser list
这假定该成员被称为foo
,并且应该通过复制function参数来初始化该成员。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句