gpt4 book ai didi

c++ - 将 C++ 模板从 GCC 移植到 Visual C++ 时出错

转载 作者:行者123 更新时间:2023-11-30 01:31:14 24 4
gpt4 key购买 nike

以下在 GCC 中编译:

cvec.hpp:

template <class T>
class cvec : public deque<T>
{
class deque<T>::iterator Find(T);
};

cvec.cpp:

template <class T> 
class deque<T>::iterator cvec<T>::Find(T element)
{

}

在 Visual C++ 中,获取:

错误 C2242“typedef 名称不能跟在类/结构/union 之后。

我将头文件中的“class”更改为“typename”,但收到错误 C3860 - 模板参数列表必须按照模板参数列表中使用的顺序列出参数。在这种情况下只有一个参数 T。除非编译器对 Find(T element) 感到困惑?

最佳答案

标题中的这应该是什么意思:

class deque<T>::iterator Find(T);

你不是在声明一个类。 typename 关键字在这里是有效的,但是 class 没有意义。

.cpp文件中也是如此:

template <class T> 
typename deque<T>::iterator cvec<T>::Find(T element)

是正确的,class 不是。

除此之外,您尝试做的事情看起来确实是一个可怕的想法。 std::deque 已经有一个 find 函数。有用。它是正确的。这是有效的。无需重新发明它。

标准库容器也不是为派生而设计的。他们没有虚拟析构函数。

你所取得的成就(除了编译错误)是你最终会得到一个有缺陷、效率低下的容器类,这会使其他 C++ 程序员感到困惑,因为它不使用惯用的接口(interface)。

关于c++ - 将 C++ 模板从 GCC 移植到 Visual C++ 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3406686/

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