如何通过引用类来传递数组
How do I pass an array by reference to a class?
这来自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);
相关文章:
- 通过指向指针数组的指针访问子类的属性
- 通过JNI传递数据数组的最快方法是什么
- 通过交换元素使数组相同
- 通过指针与数组引用扩展数组索引序列
- 通过unique_ptr访问std::数组
- 当我尝试通过 arduino 上的引用传递布尔数组时出现问题
- 通过指针算法计算数组长度
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 在C++中,建议通过数组循环的方式是什么?
- 当我尝试通过构造函数分配 char 数组时出现错误
- 通过分隔符分隔包含 UTF-16 BE 文本的uint8_t数组
- 如何通过 malloc 为队列数组分配内存?
- 我正在尝试修改一个字节数组并通过 JNI 将其从 c++ 发送到 java
- 数组是通过引用传递的,但是如果我只传递未存储在内存中的数组的值,会发生什么
- C 数组并未通过参考通过
- 为什么数组只能通过引用返回
- 包含"random"值的类的数组属性(通过另一个类的指针访问时)
- 结构数组-不通过数据的函数
- 在2D数组中通过重载数组下标操作符进行访问
- C++字符数组未通过管道读取