如果两个C++文件具有相同名称的类的不同定义,那么当它们被编译和链接时,即使没有警告也会抛出某些内容.例如,
// a.cc
class Student {
public:
std::string foo() { return "A"; }
};
void foo_a()
{
Student stu;
std::cout << stu.foo() << std::endl;
}
// b.cc
class Student {
public:
std::string foo() { return "B"; }
};
void foo_b()
{
Student stu;
std::cout << stu.foo() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当使用g ++编译和链接在一起时,两者都将输出"A"(如果a.cc在命令行顺序中位于b.cc之前).
这里有类似的话题.我看到命名空间将解决这个问题,但我不知道为什么链接器甚至不会发出警告.如果该类的一个定义具有未在另一个中定义的额外函数,则说b.cc更新为:
// b.cc
class Student {
public:
std::string foo() { return "B"; }
std::string bar() { return "K"; }
};
void foo_b()
{
Student stu;
std::cout << stu.foo() …Run Code Online (Sandbox Code Playgroud)