构造函数中的C ++初始化列表

用户名

我试图使用构造函数中另一个名为“ List”的类的初始化列表来初始化名为“ Winery”的类的实例。问题是,当我将Winery构造函数交给酿酒厂复制时,它无法复制信息。

这是Winery类的头文件:

class Winery
{
public:

    Winery(const char * const name, const char * const location, const int acres, const int rating);
    virtual ~Winery(void);

    const char * const getName() const { return name; }
    const char * const getLocation() const { return location; }
    const int getAcres() const { return acres; }
    const int getRating() const { return rating; }

private:
    char    *name;
    char    *location;
    int     acres;
    int     rating;
};

这是我的List类的头文件的相关部分:

struct Node
    {
        Node(const Winery& winery);     
        Winery item;                                            
        Node *nextByName;               
        Node *nextByRating;             
    };

这是我的List类中的构造函数:

List::Node::Node(const Winery& winery) :
item(winery.getName(), winery.getLocation(), winery.getAcres(), winery.getRating()),
nextByName(nullptr),
nextByRating(nullptr)
{
}

从我看来,似乎我正在做我需要做的所有事情。我要传递给构造函数的酿酒厂的数据成员是私有的,因此我试图通过获取信息的函数来获取它们。他们处于适当的顺序,一切正常。在初始化指针之后,指针可以正常工作,但是信息不存在,所以我真的不知道在这里做什么。如果您想知道,这是用于分配的,我们必须使用初始化列表(我在没有初始化列表的情况下尝试了它,而且也不起作用,所以我真的不知道该怎么做)。我将不胜感激任何帮助!谢谢!

编辑:这是我的Winery构造函数:

Winery::Winery(const char * const name, const char * const location, const int acres, const int rating) :
acres(acres),
rating(rating)
{
    char *newName = new char[sizeof(name) + 1];
    char *newLocation = new char[sizeof(location) + 1];
}
科林·巴斯内特

从它的外观来看,这些行:

char *newName = new char[sizeof(name) + 1];
char *newLocation = new char[sizeof(location) + 1];

实际上根本不执行任何操作,因为locationname字符串没有分配或编写,这可能是问题的根源。您的acresrating应该已经正确构建。

这是我创建的工作版本(此处为ideone-> http://ideone.com/v98zpq

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

class Winery
{
public:
    Winery(const char * const name, const char * const location, const int acres, const int rating) :
        name(strdup(name)),
        location(strdup(location)),
        acres(acres),
        rating(rating)
    {
    }

    virtual ~Winery(void)
    {
        free(name);
        free(location);
    }

    const char * const getName() const { return name; }
    const char * const getLocation() const { return location; }
    const int getAcres() const { return acres; }
    const int getRating() const { return rating; }

private:
    char    *name;
    char    *location;
    int     acres;
    int     rating;
};

struct Node
{
    Node(const Winery& winery);
    Winery item;
};

Node::Node(const Winery& winery) :
    item(winery.getName(), winery.getLocation(), winery.getAcres(), winery.getRating())
{
}

int main()
{
    Winery winery("Mission Hill Winery", "Kelowna, BC, Canada", 646, 4);

    Node node(winery);

    printf("%s\n", node.item.getName());
    printf("%s\n", node.item.getLocation());
    printf("%i\n", node.item.getAcres());
    printf("%i\n", node.item.getRating());
}

输出:

Mission Hill Winery
Kelowna, BC, Canada
646
4

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列表初始化结合构造函数

来自分类Dev

构造函数初始化列表中的循环依赖

来自分类Dev

构造函数初始化列表中的ADL

来自分类Dev

复制构造函数中的初始化列表

来自分类Dev

在构造函数中初始化静态泛型列表

来自分类Dev

复杂分配的C ++构造函数初始化器列表

来自分类Dev

C ++:具有初始化列表的默认构造函数

来自分类Dev

为什么不能在类的构造函数的初始化列表中初始化ifstream?

来自分类Dev

无法从委派构造函数的初始化列表中初始化向量

来自分类Dev

C ++构造函数:在初始化列表之前初始化局部变量

来自分类Dev

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

来自分类Dev

C ++构造函数初始化列表中的C struct副本

来自分类Dev

在类声明或构造函数初始化器列表中初始化简单成员

来自分类Dev

基本/默认构造函数与构造函数初始化列表

来自分类Dev

在类的初始化和初始化列表中

来自分类Dev

成员初始化列表中的初始化

来自分类Dev

C++ 在复制构造函数中初始化列表赋值并在复制构造函数中崩溃

来自分类Dev

C ++ 11初始化程序列表长度未在隐式构造函数中检查

来自分类Dev

C ++在构造函数初始化列表中获取类成员地址

来自分类Dev

在C ++中的类构造函数中进行列表初始化

来自分类Dev

在C ++中的构造函数中初始化数组

来自分类Dev

C ++ 11:列表初始化中的()或{}?

来自分类Dev

当parens初始化时,构造函数初始化列表中的C ++ 11大括号初始化为什么不起作用?

来自分类Dev

C ++ char *构造函数中的初始化

来自分类Dev

在类构造函数中初始化const向量(C ++)

来自分类Dev

C ++-在构造函数中初始化指针数组

来自分类Dev

C ++-在构造函数中初始化指针数组

来自分类Dev

在类构造函数中初始化const向量(C ++)

来自分类Dev

C++中构造函数初始化对象的问题

Related 相关文章

  1. 1

    列表初始化结合构造函数

  2. 2

    构造函数初始化列表中的循环依赖

  3. 3

    构造函数初始化列表中的ADL

  4. 4

    复制构造函数中的初始化列表

  5. 5

    在构造函数中初始化静态泛型列表

  6. 6

    复杂分配的C ++构造函数初始化器列表

  7. 7

    C ++:具有初始化列表的默认构造函数

  8. 8

    为什么不能在类的构造函数的初始化列表中初始化ifstream?

  9. 9

    无法从委派构造函数的初始化列表中初始化向量

  10. 10

    C ++构造函数:在初始化列表之前初始化局部变量

  11. 11

    C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

  12. 12

    C ++构造函数初始化列表中的C struct副本

  13. 13

    在类声明或构造函数初始化器列表中初始化简单成员

  14. 14

    基本/默认构造函数与构造函数初始化列表

  15. 15

    在类的初始化和初始化列表中

  16. 16

    成员初始化列表中的初始化

  17. 17

    C++ 在复制构造函数中初始化列表赋值并在复制构造函数中崩溃

  18. 18

    C ++ 11初始化程序列表长度未在隐式构造函数中检查

  19. 19

    C ++在构造函数初始化列表中获取类成员地址

  20. 20

    在C ++中的类构造函数中进行列表初始化

  21. 21

    在C ++中的构造函数中初始化数组

  22. 22

    C ++ 11:列表初始化中的()或{}?

  23. 23

    当parens初始化时,构造函数初始化列表中的C ++ 11大括号初始化为什么不起作用?

  24. 24

    C ++ char *构造函数中的初始化

  25. 25

    在类构造函数中初始化const向量(C ++)

  26. 26

    C ++-在构造函数中初始化指针数组

  27. 27

    C ++-在构造函数中初始化指针数组

  28. 28

    在类构造函数中初始化const向量(C ++)

  29. 29

    C++中构造函数初始化对象的问题

热门标签

归档