我有两个静态库(a.lib
和b.lib
)
在内部,库a
具有类Foo
,但它不会在任何公开可用的包含中公开。库b.lib
也有类Foo
,它也不会在界面中公开。这些类位于同一名称空间中,并具有相同的构造函数签名。
当我调试或运行可执行文件(使用两个库)时,我发现创建了lib a
而不是lib b
的错误类。
试图了解这是如何发生的。这是链接器问题吗? (即类名相同,链接器插入它先找到的任何内容)
答案 0 :(得分:5)
静态库很少比目标文件的档案更多。与静态库链接时,它与链接单独的目标文件相同。目标文件基本上是单个translation unit。由于the One Definition Rule,您不能在具有相同名称的不同翻译单元中使用两个不同的类,因为这将导致undefined behavior。
如果你想拥有"私人"库中的类,使用名称空间并定义" private" (唯一命名的)命名空间内的类。