C++クラスのインラインメンバー関数はどこに置くべきですか


今日C++Primerを復習したとき、C++クラスのインラインメンバー関数の配置について、ヘッダファイルに置くべきだと見ました.では、これはいったいなぜですか.
どうですか.コード仕様の問題なのか、それともそうしなければならないのか.
次に私自身の理解についてお話ししましょう.この問題を徹底的に理解するには、まず関数の宣言と定義を理解しなければならない.関数は
複数の場所で宣言されますが、1つの場所でしか定義できません.そうしないと、再定義が発生します.ほとんどの関数のデフォルトは外部リンクであり、inline関数のデフォルトは内部チェーンです.
つなぎます.つまりinline関数はこのファイルでしか使用できず、他のファイルには表示されません.通常、あるクラスを使用するときは、ファイルに追加します.
クラスのヘッダファイルを開き、クラスのインタフェースを使用できるようにします.私たちのクラスのメンバー関数の実現はすべて対応しています.cppファイルのh
ファイルに宣言されます.これで私たちは通過できます.hファイルのメンバー関数の宣言は定義を見つけ、メンバー関数を使用します.ただしinline関数を
置くcppファイルでは、そのペアのみが正しい.cppファイルは有効で、アクセスできません.クラスの宣言のヘッダファイルに配置します
サンプルは、ヘッダファイルを含めることで使用します.
次に、実際の例を書いて説明します.まず、クラス宣言のヘッダファイルにインライン関数を配置します.
/*test.h*/
#ifndef TEST_H
#define TEST_H

#include <iostream>
using std::cout;
using std::endl;

class test
{
public:
	test():x(10){}
	inline void print();
	void display (int y);
private:
	int x;
};

void test::print()
{
	cout << x << endl;
}

#endif
/*test.cpp*/
#include <iostream>
#include "test.h"
using std::cout;
using std::endl;

void test::display(int y)
{
	cout << x * y << endl;
}

実行結果は正常です.次に、インライン関数を配置します.cpp中去:
/*test.h*/
#ifndef TEST_H
#define TEST_H

#include <iostream>
using std::cout;
using std::endl;

class test
{
public:
	test():x(10){}
	inline void print();
	void display (int y);
private:
	int x;
};

#endif
/*test.cpp*/
#include <iostream>
#include "test.h"
using std::cout;
using std::endl;

void test::print()
{
	cout << x << endl;
}

void test::display(int y)
{
	cout << x * y << endl;
}

関数と上のmainをテストします.cppは同じです.エラーが発生しました.
error LNK 209:解析不能外部符号「public:void__thiscalltest::print(void)」(?print@test@@QaEXXZ)という記号が書かれています.
数_mainで参照されます.テスト関数を次のように変更します.
int main()
{
	test T;
	T.display(10);
	//T.print();

	system("pause");
	return 0;
}

では、動作結果は正常です.これから結論を出すことができる:インライン関数はヘッダファイルまたは.cppでは間違いありませんが、プログラムで訪問する必要がある場合は
それを聞くと、ヘッダファイルに入れなければなりません.
転載先:
 
C++クラスのインラインメンバー関数はどこに置くべきですか.