Code:
int printAll();
void Data::printAll(info.height){
cout << "info.height: " << info.height << "\n";
}
The debugger has actually told you everything you would need to solve these problems. If you don't know how to read debugger messages, that's pretty much necessary for becoming a programmer.
Notice how printAll() has been given two different return types (<int> and <void>), and two different sets of parameters. In order to define a function that has already been prototyped, the return type and parameters have to be the same. Otherwise the compiler considers them two different functions.
The parameter you've given it in the definition is unusable. Parameters need to have the type specified. As well, when you call a class method using the dot operator (ie, info.printAll(args)), the function automatically knows everything about the calling object (you'll get this better when you learn about keyword this). For the moment, here is a silly example to help visualize:
Code:
You create a class PERSON
This class contains variables like numberOfLegs, height, and walkingSpeed
The class also contains a method: void walk()
You then create an object of class PERSON, namely Bob.
When you tell Bob to walk ( ie: bob.walk() ), you don't need to tell Bob how many legs he has, how tall he is,
or how fast he normally walks;
All PERSONs already know these things!