【发布时间】:2013-03-26 14:24:48
【问题描述】:
我经历了我无法理解的定义的崩溃。
问题大致如下:
主项目文件有两个包含:
include <lib1.h>
include <lib2.h>
第一个头文件包括库中的其他几个头文件,其中一个头文件有一个直接(未包含名称空间)定义:
template<typename T> class SparseMatrix;
lib2.h里面有以下内容
namespace lib2
{
using namespace lib3;
class ...
{
...
SparseMatrix<double> ...
...
}
}
在lib3里面,被命名空间覆盖,还有一个SparseMatrix类的定义。
每个库单独编译没有问题。当我尝试编译使用 的可执行文件时,编译器会产生错误:
lib2.h:70:7: error: reference to 'SparseMatrix' is ambiguous
这对我来说看起来很奇怪,因为我没有在主程序中写任何地方
using namespace lib3;
因此,我认为这些定义没有理由崩溃。 我将不胜感激任何可能的问题解释。
当然,我可以将 lib1 中的定义封装到它们自己的命名空间中,但是我需要在那里修改相当多的文件,而我宁愿不这样做。
评论: 下面的答案是正确的,但我也能够通过更改包含文件的顺序来解决这个问题,即首先包含 lib2,然后是 lib1。
【问题讨论】:
标签: c++ oop shared-libraries static-libraries