我在 Visual Studio 2008 中从事 C++ 编程任务。我们提供了定义以下命名空间层次结构的文件(名称只是为了这篇文章,我知道“命名空间 XYZ-NAMESPACE”是多余的):
(MAIN-NAMESPACE){
a bunch of functions/classes I need to implement...
(EXCEPTIONS-NAMESPACE){
a bunch of exceptions
}
(POINTER-COLLECTIONS-NAMESPACE){
Set and LinkedList classes, plus iterators
}
}
MAIN-NAMESPACE 内容在一堆文件之间拆分,出于某种我不理解的原因,Set 和 LinkedList 的 operator<< 完全在 MAIN-NAMESPACE 之外(但在 Set 和 LinkedList 的头文件中)。这是套装版本:
template<typename T>
std::ostream& operator<<(std::ostream& os,
const MAIN-NAMESPACE::POINTER-COLLECTIONS-NAMESPACE::Set<T>& set)
现在问题来了:我有以下数据结构:
Set A
Set B
Set C
double num
它被定义在 MAIN-NAMESPACE 中的一个类中。当我创建该类的一个实例并尝试打印其中一组时,它告诉我:错误 C2679:二进制“<<”:未找到采用“const MAIN-NAMESPACE”类型的右侧操作数的运算符: :POINTER-COLLECTIONS-NAMESPACE::Set' (或没有可接受的转换)
但是,如果我只是编写一个 main() 函数,并创建 Set A,填充它并使用运算符 - 它可以工作。
知道有什么问题吗?(注意:我尝试了 using 和 include 我能想到的任何组合)。