1

私は自分のゲームを微調整しているだけです (クラス宣言を *.h ファイルに入れ、その定義を対応する .cpp オブジェクト ファイルに入れます) が、メソッド定義の横に「inline」キーワードをいつ使用する必要があるのか​​よくわかりませんそして私がそうしないとき。披露させて:

//shape.h
//header guards and includes in here
class shape
    {     
          private:
                  char type;
                  int verticies[4][2];
                  int centre[2];
                  int radius;
          public:
                 shape(int coordinates[4][2]);
                 shape(int coords[2], int r);
                 void Change(int coordinates[4][2]);
                 void Change(int coords[2], int r);
                 //more functions...
    };

//shape.cpp
#include "shape.h"

inline shape::shape(int coordinates[4][2])//Constructor for a rectangle shape
{                
            for (int i=0; i<8; i++) //copy arguments to class
             verticies[i/2][i%2]=coordinates[i/2][i%2];
             //calculate centre of the rectangle
             centre[0]=(coordinates[0][0]+coordinates[2][0])/2;
             centre[1]=(coordinates[0][1]+coordinates[2][1])/2;
}

inline shape::shape(int coords[2], int r)//Constructor for a circle shape
{
            type='C';
            centre[0]=coords[0];
            centre[1]=coords[1];
            radius=r;
}

inline void shape::Change(int coordinates[4][2])//change coordinates of a rectangle shape
{
            if (type=='C') return;//do nothing if a shape was a circle
             for (int i=0; i<8; i++)
             verticies[i/2][i%2]=coordinates[i/2][i%2];
             centre[0]=(coordinates[0][0]+coordinates[2][0])/2;
             centre[1]=(coordinates[0][1]+coordinates[2][1])/2;
             if(verticies[0][0]-verticies[1][0]==0 || verticies[0][1]-verticies[1][1]==0) type='S'; else type='R';
}

inline void shape::Change(int coords[2], int r)//change coordinates for a circle shape
{
        if (type=='R' || type=='S') return; //do nothing if a shape was not a circle
        centre[0]=coords[0];
        centre[1]=coords[1];            
        radius=r;
}
//and so on...

インライン キーワードがないと、「'shape::shape(int (*) [2])' の複数の定義」エラーが発生します。ただし、他のクラスでは「インライン」を使用する必要はありませんでした。だから私の質問は:いつ「インライン」キーワードを使用しなければならないのですか?とにかくそれが重要なのはなぜですか?

編集:この状況でインラインを使用することは悪い考えであると通知されました。したがって、ソース ファイルとヘッダー ファイルを実装する適切な方法は何ですか?

4

2 に答える 2