Serviceを読んで理解し、同意したものとみなします。USEMYPRINTの定義しているファイルを参照していないので、常にundefindedになり、関数の実体がコンパイルされないためリンクエラーになっているのでは無いでしょうか。19:25Eigenはassertを呼び出す側もヘッダ内に書かれているので、「乱暴な解決策」に近いですね...。マクロを使えばMyPrintf()で呼び出される実装を切り替えることはできるでしょうが、コンパイルの有無を切り替えることはできないかと。分岐を行いたい.の様な定義はプロジェクト名.hpp等のファイルにまとめ、そのファイルを適宜インクルードするのが良いと思います。//USEMYPRINTの様にして、.cppでの#defineを避け、#defineは必ずヘッダーファイルで行い、そのシンボルを参照するソースファイルは必ず#defineをまとめたヘッダーファイルをインクルードするようにすると良いと思います。両機能を組み合わせることを前提にprint_test.cppファイル内で常にMyPrintf()を定義して構いませんし、print_test.hppファイル内で常にMyPrintf()を宣言して構いません。main.cpp内で使用されなければ自動的に削除されます。追記を受けて、やりようはいくらでもあると思います。先述したように使用されなかった関数は消されますから両方定義してしまい、ヘッダーファイル内で分岐してしまうとか。クラス定義内に書かれた関数は自動的にインラインとなるため、最適化されればオーバーヘッドもないはずです。これはあくまでテンプレート引数を嫌うコメントを受けての例です。さん、C++言語の場合、例えば分岐する条件をテンプレートパラメーター引数で受け取るテンプレート関数を用意したりといろいろなアプローチがあるため、もう少し具体的な例を挙げてくれるとよりよいコードを提示できるかもしれません。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。関連する質問3constとdefineは何が違うのですか0macでc/c++をコンパイルできない。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。