gpt4 book ai didi

c++ - 模板转换运算符

转载 作者:行者123 更新时间:2023-11-30 04:20:34 25 4
gpt4 key购买 nike

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

啊啊

#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

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

最佳答案

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

嗯:

#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" . A.h 然后包括 B.h.当编译器开始编译 B.h 时,它还没有看到 A.h 的声明,因此编译器不知道如何解释 operator A<T>() const。 ,因为它不知道 A 是一种类型。

关于c++ - 模板转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com