考虑此文件, first.cpp
, 包含分类定义和使用 :
#include <iostream>
struct Foo
{
Foo(){ std::cout << "Foo()" << std::endl; }
~Foo(){ std::cout << "~Foo()" << std::endl; }
};
int main(){
Foo f;
return 0;
}
和另一个, second.cpp
,含有相互冲突的类别定义:
#include <iostream>
struct Foo
{
Foo();
~Foo();
};
Foo::~Foo(){ std::cout << "wrong ~Foo()" << std::endl; }
链接人抱怨重复符号, 因为有两个功能, 名称相同, 但是这些带有重复类方法的文件没有错误地编译 。
我编集了这些命令:
$ g++ -c second.cpp -o second
$ g++ second first.cpp -o first
将参数重新排序到第二个 g/code> 调用并不改变输出 。
当 first
运行时, 这就是输出 :
$ ./first
Foo()
wrong ~Foo()
< strong> 为什么链接允许重复类方法? strong> 如果显然允许, 为什么 < code> wrongong ~Foo () 打印?