- 此问题在此处已有答案**:
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]
像上面那样动态的,但是它没有解决这个问题。
1条答案
按热度按时间5ssjco0h1#
罪魁祸首:
这将返回通道的副本,因此
b1
拥有的实际通道没有被修改,您需要返回一个引用。