4

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 オブジェクトを 1 つだけインスタンス化する場合は、すべて問題ありません。ただし、次の 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;
}

乾杯、リス

4

1 に答える 1

7

クラス定義内で関数 (この場合はコンストラクター) を定義すると、結果は、inlinec++ 標準に従って、キーワードを使用してクラス外で定義した場合と同じになります。

7.1.2.3 クラス定義内で定義された関数はインライン関数です

そのため、コンパイラはヒントを取得しますが、警告メッセージの理由から、inlineコンストラクターをインライン化するのは悪い考えであると考えているため、警告が表示されます。main

更新:はい、この警告を回避するには、 EDITのようにクラスを定義する必要があります。できれば、複数の定義エラーを回避するために、定義を .cpp ファイルに入れます。

于 2015-09-23T10:23:12.883 に答える