我不能在c++中打印类成员的字符串[duplicate]

wsewodh2  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(111)
    • 此问题在此处已有答案**:

Difference between returning reference vs returning value C++(3个答案)
(18个答案)
Function in C++ returns by value or by reference?(7个答案)
3天前关闭。
我做了一个类,它包含了另一个类的数组,当我编辑这个类的一个成员并想打印它时,它打印了一些不可解释的东西。
在文件. hpp中有一个类:

class channel
{
        char name[50];

     public:
        channel();
        void setName(char*);
        char *getName();
}

class Case
{
        char name[50];
        channel *channels;

    public:
        Case();
        channel get_channel(int);
}

这是一个文件. cpp:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include "file.hpp"

channel::channel(){}

void channel::setName(char *c)
{
    char buffer[50];

    sprintf(buffer, "%s", c);

    sprintf(name, "%s", buffer);
}

char* channel::getName()
{
    return nom;
}

Case::Case()
{
    int i;

    channels = (channel *)malloc(14 * sizeof(channel));

    for (i = 0; i < 14; i++)
    {
        channels[i] = channel();
    }
}

channel Case::get_channel(int nb)
{
    return channels[nb];
}

void main()
{
    Case b1 = Case();
    b1.get_channel(4).setName("food");
    printf("%s", b1.get_channel(4).getName());
}

所以我已经尝试过用strcpy()或sprintf()修改成员 * name * 的方法,但都没有成功。
我还尝试在. hpp文件中进行如下静态分配:Channel Channels[14]
像上面那样动态的,但是它没有解决这个问题。

5ssjco0h

5ssjco0h1#

罪魁祸首:

channel Case::get_channel(int);

这将返回通道的副本,因此b1拥有的实际通道没有被修改,您需要返回一个引用。

channel& Case::get_channel(int nb)
{
    return channels[nb];
}

相关问题