我今天遇到了一个奇怪的错误,直到现在我还是设法避免了它。
文件 1.cpp:
#include <iostream>
inline void print() { std::cout << "Print1\n"; }
void y() { print(); }
文件 2.cpp:
#include <iostream>
inline void print() { std::cout << "Print2\n"; }
void x() { print(); }
主.cpp:
int x();
int y();
int main(){
x();
y();
}
输出:
Print1 (Expected Print2)
Print1
因为print()
具有内联链接,所以不会产生多重定义错误(用 编译g++ -Wall file1.cpp file2.cpp main.cpp
)并且重复的符号会被静默折叠。我看到的实际情况是使用内联类方法,而不是显式内联函数,但效果是一样的。
我想知道是否有链接器选项或类似选项可以让我在发生此类错误时发出警告?