ошибка при вызове вряд ли возможна, и размер кода будет расти [-Winline], но без использования встроенного

очень плохо знаком с C ++.

Вот мой пользовательский класс fmiNode: (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;
};

Вот мой основной метод (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();
}
}

Если я создаю экземпляр только одного объекта fmiNode, то все в порядке. но следующие 3 вызывают предупреждение:

 warning: inlining failed in call to ‘fmiNode::fmiNode(std::string, int)’: call is unlikely and code size would grow [-Winline]

Что я тут не так делаю.

РЕДАКТИРОВАТЬ:

Поэтому я должен определить свой класс следующим образом:?

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;
}

Ура,
Rhys

4

Решение

Если вы определяете функцию (конструктор, в вашем случае) внутри определения класса, результат будет таким же, как и определение ее вне класса с помощью inline ключевое слово согласно стандарту c ++:

7.1.2.3 Функция, определенная в определении класса, является встроенной функцией

Таким образом, компилятор получает inline намекнуть, но думает, что встраивание конструктора в main Это плохая идея из-за причин в предупреждающем сообщении, поэтому оно выдает предупреждение.

Обновить: да, вы должны определить класс как в вашем РЕДАКТИРОВАТЬ чтобы избежать этого предупреждения. Еще лучше, поместите определение в файл .cpp, чтобы избежать нескольких ошибок определения.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]