今日、これまでどうにか回避できていた奇妙なバグに遭遇しました。
file1.cpp:
#include <iostream>
inline void print() { std::cout << "Print1\n"; }
void y() { print(); }
file2.cpp:
#include <iostream>
inline void print() { std::cout << "Print2\n"; }
void x() { print(); }
main.cpp:
int x();
int y();
int main(){
x();
y();
}
出力:
Print1 (Expected Print2)
Print1
print()
インライン リンケージがあるため、複数定義エラー ( でコンパイルg++ -Wall file1.cpp file2.cpp main.cpp
) は生成されず、重複したシンボルは黙って折りたたまれます。私がこれを見た実際のケースは、明示的なインライン関数ではなく、インライン クラス メソッドを使用していましたが、効果は同じです。
このタイプのエラーが発生したときに警告を生成できるリンカーオプションまたは類似のものがあるかどうか疑問に思っていますか?