这是来自main:
test.Begin(static_cast<Start::Person>(player[NUM_PLAYERS]), NUM_PLAYERS);
“static_cast”用红色加下划线,当我将鼠标悬停在它上面时说:
错误:从“Start :: Person”到“Start :: Person *”不存在合适的转换函数
这是来自start.h:
void Begin (Person *, int);
这是来自start.cpp
void Start::Begin (Person *player[4], int NUM_PLAYERS)
错误:声明与“void Start :: Begin(Start :: Person *,int)”
不兼容后面是我已经为start.h显示的行的位置
答案 0 :(得分:1)
// 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)
答案 1 :(得分:0)
第二个错误是因为您对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]);
这会将const引用传递给任意大小为Person
的数组;这是一个不可修改的直接引用(因此没有制作副本),您可以使用以下任何一种方式调用:
Start::Person oldPlayers[6] = {};
Start::Person newPlayers[15] = {};
Start::Person mvps[3] = {};
s.Begin(oldPlayers);
s.Begin(newPlayers);
s.Begin(mvps);