如何通过引用类来传递数组

How do I pass an array by reference to a class?

本文关键字:数组 何通过 引用      更新时间:2023-10-16

这来自main:

test.Begin(static_cast<Start::Person>(player[NUM_PLAYERS]), NUM_PLAYERS);

"static_cast"用红色下划线,当我把鼠标悬停在上面时,它会显示:

错误:不存在从"开始::人"到"开始:人*"的合适转换功能

这是从一开始。h:

void Begin (Person *, int);

这是来自start.cpp

void Start::Begin (Person *player[4], int NUM_PLAYERS)

start.cpp中的"开始"用红色下划线,当我将鼠标悬停在它上面时,错误显示:

错误:声明与"void Start::Begin(Start::Person*,int("不兼容

然后是我已经显示的开始行的位置。h

// assunimg 'player' is an array
test.Begin(player, NUM_PLAYERS); // no cast

start.h:

void Begin (Person [], int);

start.c:

void Start::Begin (Person player[], int NUM_PLAYERS)

第二个错误是因为Begin的定义与Begin的声明不匹配。您的声明正在传递一个Person*,而您的定义正在接受Person的数组4。您可以通过将定义(在.cpp文件中(更改为:来解决此问题

void Start::Begin(Start::Person* player, int);

这将符合你的定义。你可以用下面的词来称呼它:

Start::Person players[10] = {};
// Assume 's' is an object of type Start
s.Begin(players, 10);

这需要将索引传递给Person,然后传递元素的数量。您可以通过将Begin的声明与您的定义相匹配来使变得更好

void Begin(Start::Person players[4]);

现在Begin将只接受一个由4个Person组成的数组,您可以用以下命令调用它:

Start::Person players[4] = {};
// Assume 's' is an object of type Start
s.Begin(players);

这将把数组的COPY传递到Begin中。您可以通过以下声明/定义进一步改进这一点:

template <size_t size>
void Begin(const Person (&players)[size]);

这将传递对Person的任何大小的数组的常量引用;这是一个不可修改的直接引用(因此不会复制(,您可以用以下任何一种方法调用它:

Start::Person oldPlayers[6] = {};
Start::Person newPlayers[15] = {};
Start::Person mvps[3] = {};
s.Begin(oldPlayers);
s.Begin(newPlayers);
s.Begin(mvps);