我想为两个模板重载转换运算符。
A.H
#pragma once
#include <B.h>
template <typename T> class A
{
operator B<T>() const;
}
B.h
#pragma once
#include <A.h>
template <typename T> class B
{
operator A<T>() const;
}
我收到了错误
error C2833: 'operator A' is not a recognized operator or type see
reference to class template instantiation 'B<T>' being compiled
虽然只有在一个模板中重载转换运算符才有效。
答案 0 :(得分:2)
您有循环依赖问题。您需要有一个前向声明,例如:
A.H:
#pragma once
template <class T> class B;
template <class T> class A {
operator B<T>() const;
};
#include "B.h"
template <class T>
A<T>::operator B<T>() const {
foo();
}
B.h:
#pragma once
#include "A.h"
template <class T>
class B {
operator A<T>() const {
bar();
}
};
我假设您使用了#include "A.h"
。然后包括B.h.当编译器开始编译B.h时,它还没有看到A.h的声明,因此编译器不知道如何解释operator A<T>() const
,因为它不知道A是一个类型。