为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

盒装的

当我尝试以下操作时,我的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么我们需要一个空的构造函数来从Firebase传递/保存数据?

来自分类Dev

为什么我们需要一个用户提供的const对象构造函数?

来自分类Dev

为什么我们需要在React Hook中返回一个函数?

来自分类Dev

在C ++中通过引用传递对象

来自分类Dev

为什么我们需要创建一个one-arg构造函数才能使用临时的无名对象?

来自分类Dev

如果我们从函数构造函数创建一个名为“ a”的对象,那么为什么“ a”不是Function的实例?

来自分类Dev

为什么我们需要在堆中创建一个对象?

来自分类Dev

Scala集合:为什么我们需要一个case语句来提取高阶函数中的值元组?

来自分类Dev

在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

来自分类Dev

为什么我们在 main 函数中启动一个对象

来自分类Dev

当我们为一个类的对象分配一个整数值时,为什么要调用参数化构造函数?

来自分类Dev

为什么我们需要C ++中的虚函数?

来自分类Dev

为什么在C ++ 11中,我们从vector :: resize中的一个函数移至2个版本?

来自分类Dev

不要在AngularJS函数中通过引用传递对象

来自分类Dev

为什么我们需要一个接口来定义aem中的每个服务?

来自分类Java

为什么我们需要序列化对象才能将一个活动传递给Android中的另一个活动

来自分类Dev

为什么我们不能在构造函数中创建非静态自引用对象

来自分类Dev

为什么我们需要引用成员的副本构造函数

来自分类Dev

为什么我们需要一个扫描器对象来在 java 中获取输入

来自分类Dev

为什么对象通过引用自动传递?

来自分类Dev

为什么我们需要在MSIL中显式调用父构造函数?

来自分类Dev

为什么我们需要在实体中声明非空构造函数?

来自分类Dev

在C ++中通过引用传递?

来自分类Java

为什么我们需要Java中的默认方法?

来自分类Dev

在R中的函数中更改全局对象/通过引用传递对象

来自分类Dev

为什么我们需要在优先级队列声明中添加一个向量作为参数?

来自分类Dev

为什么我们需要一个矩阵来在 MATLAB 中绘制 3D 图形?

来自分类Dev

通过引用传递Error对象,而不是从方法中抛出异常,是一个好主意吗?

来自分类Dev

为什么在安装过程中需要为Tensorflow创建一个conda环境?为什么我们不能通过pip安装Tensorflow?

Related 相关文章

  1. 1

    为什么我们需要一个空的构造函数来从Firebase传递/保存数据?

  2. 2

    为什么我们需要一个用户提供的const对象构造函数?

  3. 3

    为什么我们需要在React Hook中返回一个函数?

  4. 4

    在C ++中通过引用传递对象

  5. 5

    为什么我们需要创建一个one-arg构造函数才能使用临时的无名对象?

  6. 6

    如果我们从函数构造函数创建一个名为“ a”的对象,那么为什么“ a”不是Function的实例?

  7. 7

    为什么我们需要在堆中创建一个对象?

  8. 8

    Scala集合:为什么我们需要一个case语句来提取高阶函数中的值元组?

  9. 9

    在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

  10. 10

    为什么我们在 main 函数中启动一个对象

  11. 11

    当我们为一个类的对象分配一个整数值时,为什么要调用参数化构造函数?

  12. 12

    为什么我们需要C ++中的虚函数?

  13. 13

    为什么在C ++ 11中,我们从vector :: resize中的一个函数移至2个版本?

  14. 14

    不要在AngularJS函数中通过引用传递对象

  15. 15

    为什么我们需要一个接口来定义aem中的每个服务?

  16. 16

    为什么我们需要序列化对象才能将一个活动传递给Android中的另一个活动

  17. 17

    为什么我们不能在构造函数中创建非静态自引用对象

  18. 18

    为什么我们需要引用成员的副本构造函数

  19. 19

    为什么我们需要一个扫描器对象来在 java 中获取输入

  20. 20

    为什么对象通过引用自动传递?

  21. 21

    为什么我们需要在MSIL中显式调用父构造函数?

  22. 22

    为什么我们需要在实体中声明非空构造函数?

  23. 23

    在C ++中通过引用传递?

  24. 24

    为什么我们需要Java中的默认方法?

  25. 25

    在R中的函数中更改全局对象/通过引用传递对象

  26. 26

    为什么我们需要在优先级队列声明中添加一个向量作为参数?

  27. 27

    为什么我们需要一个矩阵来在 MATLAB 中绘制 3D 图形?

  28. 28

    通过引用传递Error对象,而不是从方法中抛出异常,是一个好主意吗?

  29. 29

    为什么在安装过程中需要为Tensorflow创建一个conda环境?为什么我们不能通过pip安装Tensorflow?

热门标签

归档