c/c++语言开发共享奇怪的C ++模板问题

所以基本上我们必须创建一个双向链接列表,这个列表一般是模板化的,而不是锁定到单个数据类型。 我已经尝试使用gcc和msvc进行编译,两个编译器都给了我大致相同的错误,所以我假设它只是我的错误编码,而不是一个编译器或另一个编译器的古怪。

目前,我收到错误,说我在linkList.h中的类不是模板

../linkList.h:34:错误:’llist’不是模板类型
../linkList.h:143:错误:’iter’不是模板类型
../josephus.cpp:14:错误:’llist’不是模板
../josephus.cpp:14:错误:聚合’llist ppl’的类型不完整,无法定义
../josephus.cpp:15:错误:’iter’不是模板

linkList.h


 template class iter { public: iter() { position = sentin; container = sentin->payload; } T get() const { assert(position != sentin); return position->payload; } void next() { position = position->next; } void previous() { position = position->prev; } bool equals(iter itr) const { return position == itr.position; } private: node *position; llist *container; }; 

josephus.cpp


 llist ppl; iter pos; int start = static_cast(argv[1]) - 1; int end = static_cast(argv[2]) - 1; 

对此事的任何帮助都非常感谢

    你的前瞻声明说llist是一个类:

     class llist; 

    然后你说它是一个模板:

     template class llist; 

    iter类似。

    我不知道你怎么能让它容易编译。 但是,您可以在llist创建nodeiter

    有几个问题。

     class A; 

    不是你转发声明模板类的方式。

    如果A有一个模板化参数,您需要说:

     template class A; 

    如果你说过你已经说过class A;之后就说class A; 你自相矛盾。 下一期是simlar, friend class A; 如果A模板不起作用,你需要说friend class A; 或类似的。 最后, static_cast(argv[1])将不会编译(虽然static_cast(argv[1][0])会,但仍然不想要你想要)。 要将字符串有意义地转换为整数,您需要使用atoistrtolstringstream等。

    llist不是一个类。 所以前面声明它没用。

     template class llist; 

    尝试编译代码相对简单。
    你刚刚错过了很多类型的模板部分。 搜索它的llist和节点,并确保它们在最后有适当的。

    如果你看一下STL,那么为了方便使用,可以输入一些内部类型。 你可以遵循同样的原则。

     template class llist { typedef iter Iter; typedef node Node; // The rest of the code. }; 

      以上就是c/c++开发分享奇怪的C ++模板问题相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541960.html

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐