回答編集履歴

2

追記

2021/06/09 03:05

投稿

fana
fana

スコア11996

test CHANGED
@@ -76,4 +76,4 @@
76
76
 
77
77
  * (関数次第では悪くはないやり方:)`inline int Randam10(){ ... }`とする
78
78
 
79
- * (とりあえず回避されるが普通じゃないやり方:)`static int Randam10(){ ... }`とかする
79
+ * (とりあえず回避されるが普通じゃないやり方:)`static int Randam10(){ ... }` とか `namespace{ int Randam10(){ ... } }` とかする

1

追記

2021/06/09 03:04

投稿

fana
fana

スコア11996

test CHANGED
@@ -57,3 +57,23 @@
57
57
  2つの翻訳単位に,Randam10()の定義が存在する状態.
58
58
 
59
59
  だから,リンク時に多重定義になっちゃう.
60
+
61
+
62
+
63
+ ---
64
+
65
+
66
+
67
+ 一般に(と言っていいか?),includeされる側のファイル(ヘッダ)に関数の定義(のような,定義が複数になったらまずい物)を書かないのでは,このような問題を回避するため.
68
+
69
+
70
+
71
+ 解決方法はいくつかある.
72
+
73
+
74
+
75
+ * (普通のやりかた:)func.h には 関数Randam10 の**宣言**を書き,**定義**は別の翻訳単位(例えばfunc.cppとか)に書く
76
+
77
+ * (関数次第では悪くはないやり方:)`inline int Randam10(){ ... }`とする
78
+
79
+ * (とりあえず回避されるが普通じゃないやり方:)`static int Randam10(){ ... }`とかする