所以我有这个问题。
基本上我有一个模板界面:
template <typename T, typename U>
class Iinterface
{
public:
virtual ~Iinterface()
// A pure methode for the example that gives me the problem
virtual std::vector<T> myMethod(T, U) = 0;
};
暂时没问题。所以我声明了一个将从这个接口继承的类。
class firstclass : public Iinterface<std::string, int>
{
// content doesnt matter. The problem is in second class inheritance.
// here I just put the class so we can see how I inherited in 1st class.
};
现在是 cpp 文件中的 myMethod 声明。
template <>
std::vector<std::string> firstClass::iInterface<std::string, int>::myMethod(std::string a, int b)
{
// methods code
}
到目前为止,我没有任何问题。在我的第二个类中,我声明了 myMethod 函数,并且类型 T 与返回值相同,它给了我一个编译错误。
class secondClass : public IInterface<std::vector<std::string>, int>
{
// class content
};
目前它可以编译,但是当我像这样声明 myMethod 时:
template <>
std::vector<std::string> secondClass::Iinterface<std::vector<std::string> a, int n>
{
// methodes code
}
在这里,我在 std::vector 返回值和方法参数中得到一个错误。我相信这是一个模板冲突,但我真的不知道如何解决这个问题。
第一个错误:
28 :template-id ‘_out<>’ for ‘std::vector<std::basic_string<char> > Iio<std::vector<std::basic_string<char> >, int>::_out(std::vector<std::basic_string<char> >, int)’ does not match any template declaration
第二个错误:
28 note: saw 1 ‘template<>’, need 2 for specializing a member function template
我仍在学习如何用 C++ 编写代码并快速学习,但有时我会遇到困难并需要一些帮助。我试图这样做的方式是错误的吗?我需要声明第三个类型名来解决这个冲突吗?(我在想它只会产生另一个冲突,因为这两个 typenmaes 是同一类型)。
我知道我正在尝试做的可能不是最好的方法,但我仍在学习。
如果您需要更多详细信息,请不要犹豫,我尝试使示例代码尽可能简单地解释我的问题。
所有的帮助都将非常重要。谢谢。