1

我想为两个模板重载转换运算符。

#pragma once

#include <B.h>

template <typename T> class A
{
operator B<T>() const;
}

溴化氢

#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

虽然如果转换运算符仅在一个模板中重载,它就可以工作。

4

1 回答 1

2

你有一个循环依赖问题。您需要有一个前向声明,例如:

啊:

#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();
}

乙:

#pragma once
#include "A.h"

template <class T>
class B {
   operator A<T>() const {
      bar();
   }
};

我假设你用过#include "A.h". Ah 然后包含 Bh 当编译器开始编译 Bh 时,它还没有看到 Ah 的声明,因此编译器不知道如何解释operator A<T>() const,因为它不知道 A 是一个类型。

于 2013-03-04T18:17:33.977 回答