gpt4 book ai didi

c++ - 模板类相互使用会产生歧义错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:18 24 4
gpt4 key购买 nike

我在同一个头文件中有两个模板类 A 和 B,如下所示:

template <typename T>
class FirstClass {

public:
bool convert(const FirstClass<T>& f){...}
bool convert(const SecondClass<T>& s){...}

};


template <typename T>
class SecondClass {

public:
bool convert(const FirstClass<T>& f){...}
bool convert(const SecondClass<T>& s){...}

};

为了解决任何未知的类错误,我尝试添加前向声明:

template <typename T> class SecondClass ; //adding this to the beginning of the file

我收到以下错误:

2 overloads have similar conversions 
could be 'bool FirstClass<T>::convert(const FirstClass<T>& )'
or
could be 'bool FirstClass<T>::convert(const SecondClass<T>& )'
while trying to match the argument list '(FirstClass<T>)'
note: qualification adjustment (const/volatile) may be causing the ambiguity

我假设这是因为我正在使用前向声明的类。除了将实现移至 Cpp 文件(有人告诉我这很麻烦)之外,还有其他有效的解决方案吗?

我在 Windows 7 上使用 VisualStudio 2010

最佳答案

只需在定义这两个类中的任何一个之前放置前向声明即可。

#include <iostream>    

template<typename> class FirstClass;
template<typename> class SecondClass;

template <typename T>
class FirstClass {

public:
bool convert(const FirstClass<T>& f) { std::cout << "f2f\n"; }
bool convert(const SecondClass<T>& s){ std::cout << "f2s\n"; }

};


template <typename T>
class SecondClass {

public:
bool convert(const FirstClass<T>& f){ std::cout << "s2f\n"; }
bool convert(const SecondClass<T>& s){ std::cout << "s2s\n"; }

};

int main()
{
FirstClass<int> f;
SecondClass<int> s;

f.convert(f);
f.convert(s);
s.convert(f);
s.convert(s);
}

Ideone 上输出

关于c++ - 模板类相互使用会产生歧义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14399539/

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