+ 1
Passing an array of objects as a function parameter
In the code below, I have trouble fixing the error I receive. I understand that, since I am passing an array of objects, the compiler wants a reference or a pointer as the actual function argument. My question here is how to solve that? Should I rebuild my array into one filled with pointers to the objects or is there another (more elegant) way? [And yes, I already searched the internet, but I couldnt find a satisfying answer.] https://code.sololearn.com/c6DWopnoBcQn/?ref=app
5 ответов
+ 3
Please consider providing a minimal example that shows your problem next time, it's tough to see through that much code!
Anyway I think what's happening is that you in fact aren't passing an array.
*it = CardLibrary::get()->getRandomCard(CardLibrary::classicLegendary[ClassicCards::LEGENDARY], ClassicCards::LEGENDARY);
Here you only pass the `ClassicCards::LEGENDARY`-th card to getRandomCards (which happens to be out of bounds!), not the array. If you remove the subscript and just have `...->getRandomCard(CardLibrary::classicLegendary, ...`, the error disappears.
Now your program still errors but I hope that gets you a step further!
By the way, the "nice" way to deal with arrays is most of the time not to use arrays at all but rather std::vector. It has flexible size and is just all in all more convenient. But working with plain arrays is good for practice :)
+ 10
Not sure if this helps. Just keep in mind that arrays decay to pointers when passed to functions. You can choose to explicitly declare the function to accept a pointer as argument instead, it should also work fine.
https://code.sololearn.com/cvSFcoFcIhya/?ref=app
+ 7
Bookmarking, will check back.
+ 3
Thanks for your help, yeah, the code was messy and long, im sorry to force you to go through it.
I indeed simply passed the array in the wrong way (ups...hehe...), however I still receive an error I absolutly dont get, so I'll have to code some classes from scratch I think. My bad.
@Schindlabua, as to why I dont use vectors:
Sure, vectors are more flexible with more options, but this comes with the price of additional memory space required. But I have a fixed amount of cards (copied from the actual game) that is never going to change (and shouldn't be allowed to), so I dont need the flexibility provided by vectors, since I wont delete or add any cards.
So, I chose to go with arrays and save some memory space (might not be much, but hey...).
Also, thanks for the sample code, Hatsy.
+ 1
Fair! But I'm one of these millennial programmers who is perfectly fine of dealing with the 10-20 byte overhead so I don't have to deal with the mental burden of having a weird number in my program that takes up a line of code (in your case the ClassicCards enum). Nothing wrong with arrays though in your case.