【问题标题】:How to pass a char as an argument of a function inside a class using template如何使用模板将char作为类内函数的参数传递
【发布时间】:2021-06-30 04:13:30
【问题描述】:

我正在尝试将一个 char 数组传递给这个类(BaseStack)中的一个函数(push):

template < class T >
class BaseStack
{
  void push(const T&item){
     //Ignore
    }

}

我尝试的是:

char finalstring[L];
for(int i = 0 ; i < 5; i++) 
  finalstring[i] = 'x';

BaseStack<char> c;
c.push(finalstring);

但是我的编译器说我在做一个无效的转换

【问题讨论】:

  • finalstring 的类型不是char,它的char[L](在许多情况下会衰减为char*)因为它与char 不同,所以你得到一个编译错误。

标签: c++ arrays templates


【解决方案1】:
 BaseStack<char> c;

这意味着您的模板参数是char。这是您为模板参数指定的内容。因此,您的模板实例,用很多话来说,非常松散地说:

class BaseStack
{
  void push(const char &item){
     //Ignore
    }
 }

会发生这种情况,因为您的模板参数是charT 是char,既然模板中的参数是void push(const T &amp;item),那么就是这样。

 c.push(finalstring);

finalstring 是一个char 数组,它衰减为char *。这试图将char * 传递给采用(const 对a)char 的类方法。这在 C++ 中是不允许的,这就是编译错误的原因。

不清楚你的意图是什么,模板参数是否应该是const T *,或者你只需​​要传递finalstring的第一个字符。做任何一个都可以解决这个特定的编译错误。

【讨论】:

  • 谢谢!通过仅传递 finalstring 的第一个字符,这是否意味着我会将其作为 char 或作为对数组第一个元素的引用传递?
  • 按照定义,您将传递对数组中第一个字符的引用。并且由于函数接收它作为对 const 对象的引用,push() 将无法修改它。
猜你喜欢
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
相关资源
最近更新 更多