very new to C++.
Here is my user defined fmiNode class: (fmi.h)
class fmiNode
{
public:
fmiNode(std::string NodeName,int Address)
{
this->name = NodeName;
this->address = Address;
}
std::string GetName()
{
return this->name;
}
int GetAddress()
{
return this->address;
}
private:
std::string name;
int address;
};
Here is my main method (fmi.c)
int main (int argc, char *argv[])
{
fmiNode node1("NodeA",4);
fmiNode node2("NodeB",6);
fmiNode node3("NodeC",8);
fmiNode node4("NodeD",10);
while(1)
{
MainLoop();
}
}
If I only instantiate one fmiNode object everything is fine. but the following 3 causes a warning to be thrown:
warning: inlining failed in call to ‘fmiNode::fmiNode(std::string, int)’: call is unlikely and code size would grow [-Winline]
What am I doing wrong here.
EDIT:
So I should define my class like this:?
class fmiNode
{
public:
fmiNode(std::string NodeName,int Address);
std::string GetName()
{
return this->name;
}
int GetAddress()
{
return this->address;
}
private:
std::string name;
int address;
};
fmiNode::fmiNode(std::string NodeName,int Address)
{
this->name = NodeName;
this->address = Address;
}
Cheers, Rhys
If you define a function (constructor, in your case) inside the class definition, the the result is the same as defining it outside of the class with inline
keyword, as per the c++ standard:
7.1.2.3 A function defined within a class definition is an inline function
So the compiler gets the inline
hint, but thinks that inlining the constructor into main
is a bad idea because of the reasons in the warning message, so it gives you the warning.
Update: yes, you should define the class as in your EDIT to avoid this warning. Better yet, put the definition into the .cpp file to avoid multiple definition errors.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With