【问题标题】:C++: Returning a templated object from a class, template type mismatch?C ++:从类中返回模板化对象,模板类型不匹配?
【发布时间】:2013-04-26 04:52:47
【问题描述】:

我有以下带有编译器错误的源代码。很明显我要做什么,所以我不会尝试解释,除了说返回的类型 node<N>* 不是正确的类型,因为它是一个模板,这会与 session* 对象产生冲突。这是错误。

linked_list_1.cpp|17|error: cannot convert 'node<session*>*' to 'session*' in assignment|

【问题讨论】:

  • @JoachimPileborg 是否分配在堆栈或堆上应该没有区别。他正在正确分配(尽管没有正确删除)。

标签: c++ templates types return mismatch


【解决方案1】:

在第 17 行,您想将 return_node 的返回值分配给 session*,但 return_node 的返回类型是 Node&lt;N&gt;* (Node&lt;Session*&gt;*) 而不是 N (@ 987654327@)。 在节点类中添加访问器函数,并使用它来访问数据成员,例如:

session* SESSION_COPY;
SESSION_COPY =  LIST->return_node(0)->getData();

【讨论】:

  • 在节点类中,添加一个函数N getData() { return data; },让您访问数据对象。
  • N data; 成员存储指针。在你的情况下,N 是session *。顺便说一句,除非您这样做是为了学习模板,否则请使用 std::liststd::forward_list
  • 您的 push_back 方法是否正常工作?这通常意味着您正在访问的对象在内存中无效(未分配或已被删除)。
【解决方案2】:

因为return_node 函数返回node&lt;N&gt;* 而不是N。或者当N 被模板参数替换时:return_node 返回node&lt;session*&gt;*(查看头文件)但您尝试将返回的指针分配给session* 变量。就像错误消息非常清楚所说的那样。

【讨论】:

  • @lost_with_coding 如果return_node 确实应该是公开的,那么您可能需要向node 类添加一个函数以返回包含的数据。然后你可以做例如session* s = list.return_node(0)-&gt;data();
猜你喜欢
  • 2019-06-09
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多