I am doing some practice tests with classes. I wrote this simple class:
class Person{
private:
String _name;
int _age;
int _size;
public:
Person(){
_size = 48;
}
Person(String name){
_name = name;
_size = 48;
}
Person(String name, int size){
_name = name;
_size = size;
}
int setName(String name){
_name = name;
}
int setAge(int age){
_age = age;
}
int setSize(int size){
_size = size;
}
void showData(){
Serial.print("this person's name is : ");
Serial.println(_name);
Serial.print("this person's age is : ");
Serial.println(_age);
Serial.print("this person's size is : ");
Serial.println(_size);
}
};
void setup() {
Serial.begin(9600);
Person john("John");
john.setAge(45);
john.showData();
}
void loop() {
}
Now, I would like the private variable _size to be the same for all objects of the class. I have tried to use the keyword static in front of it but it throws errors.
My understanding is that a static variable would act like a global variable for the class.
I may want to use it as a constant in certain scenarios or as a variable in others, but it has to be the same for all the objects of the class.
Any suggestions?
Cheers.
@wildbill , apologies, you were right I missed the line "int Person::_size=0;" of your code @Delta_G Thanks
this works! So static variables HAVE to be defined outside the class ?
I was trying to have it initialized by the constructor. I have noticed that if I add int Person::_size=0;
then also the constructor initialization works... I will paste the code and output below...
@b707 you are right, strangely it does not given an error about that and the functions work as expected though
class Person{
private:
String _name;
int _age;
static int _size;
public:
Person(){
_size = 48;
}
Person(String name){
_name = name;
_size = 48;
}
Person(String name, int size){
_name = name;
_size = size;
}
int setName(String name){
_name = name;
}
int setAge(int age){
_age = age;
}
int setSize(int size){
_size = size;
}
void showData(){
Serial.print("this person's name is : ");
Serial.println(_name);
Serial.print("this person's age is : ");
Serial.println(_age);
Serial.print("this person's size is : ");
Serial.println(_size);
}
};
int Person::_size=0;
void setup() {
Serial.begin(9600);
Person john("John");
john.setAge(45);
john.showData();
}
void loop() {
}
output
This person's name is : John
this person's age is : 45
this person's size is : 48
It depends on Arduino IDE settings, that are different for a different boards. When I selected a Raspberry Pi RP2040 in order to compile your code - it throw me that errors.