简体   繁体   中英

Trouble passing a whole structure array to a function

I'm sort of new to C++ and programming in general. I'm making a pokemon remake of the old gameboy version for fun, and I'm having trouble passing a whole structure as an arguement.

This is a shortened version to highlight the problem I'm having:

struct Enemy_Pokeman
{
    string opp_name;
    int num_pokeman;
    int pokeman_LVL;                  
};   

void pl_Pokeman(Enemy_Pokeman); 

void pokeman_data(string opp_name, int num_pokeman, int pokeman_ID[], int pokeman_LVL[],
                  int purpose)
{
    Enemy_Pokeman enemypokeman[num_pokeman];

    enemypokeman[0].opp_name = opp_name;
    enemypokeman[0].num_pokeman = num_pokeman;
    for(int i=0; i<num_pokeman; i++)
        enemypokeman[i].pokeman_LVL = pokeman_LVL[i];

    pl_Pokeman(enemypokeman);                   //Function call - Codeblocks detects error
                                            //on this line
}

void pl_Pokeman(Enemy_Pokeman enemy)        
{
    cout << endl;
}

Sorry if this doesn't make sense, I didn't want to post the entire thing, so I chopped it up a bit. The problem is that it won't accept Enemy_Pokeman as an arguement.

Function pl_Pokeman only takes Enemy_Pokeman type while you passed in an array of Enemy_Pokeman

You update pl_Pokeman function to take array as input:

void pl_Pokeman(Enemy_Pokeman enemy[], int arraySize);

Or

template<typename T, size_t N>
void pl_Pokeman(Enemy_Pokeman (&enemy)[N]) 

For Single structure-

When you are passing the structure as a argument, you should pass with & operator.

pl_Pokeman(&enemypokeman); // Fix 1

While catching it you need to catch it with Structure pointer.

void pl_Pokeman(Enemy_Pokeman *); // Fix 2

For Array of structure-

pl_Pokeman(&enemypokeman,size); // pass it with size

while catching it

void pl_Pokeman(Enemy_Pokeman (*)[], int );

you're passing to your function whole array of Enemy_Pokeman s, not just one element. function expects one element only. also, you're creating that array within a function, so it's a local variable. if function pokemon_data returns, that array will be destroyed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM