【发布时间】:2014-11-18 01:09:53
【问题描述】:
当我尝试以下操作时,我的 C++ 编译器给我一个错误“没有类 Foo 的默认构造函数”。
MyClass::MyClass(const Foo& foo) { ... }
如果我正在传递一个引用,那么该对象应该已经被初始化了,对吗?复制构造函数不是问题,因为我明确定义了一个。那么为什么需要一个默认构造函数来传递引用呢?
我唯一能想到的是它可能不知道要为它分配多少内存。如果这是问题所在,有没有办法告诉编译器我只打算动态分配这个对象?我无法在网上找到任何答案,非常感谢您的帮助。
编辑:我只是要在我的实际代码中进行编辑。
会员管理器.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();
}
}
NodeManager.h
#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 不存在默认构造函数。这是我的意图,但我不明白为什么它需要一个默认构造函数。
【问题讨论】:
-
这是什么语言?
-
你也应该像我一样添加c++标签。
-
您已经展示了
MyClass的构造函数,它接受Foo作为输入。Foo有什么样的构造函数?当您收到错误时,对MyClass构造函数的调用是什么样的?编译器试图告诉您您正在传递一些它无法构造Foo的东西。 -
您发布的极短代码示例很好:ideone.com/zHgTLp。请编辑足够的代码以复制此问题。我怀疑您正在尝试默认构造
Foosomwhere。 -
@Bbqsauce 我发布的链接显示您的 OP 中的代码编译。请编辑足够的代码来复制您的问题。
标签: c++ parameters constructor default required