【问题标题】:Cannot convert from char to char*无法从 char 转换为 char*
【发布时间】:2015-08-08 04:29:49
【问题描述】:

有人能告诉我为什么我会得到这个吗?这没有意义。

 enum type{
     Entity = 1,
     String = 2,
     Vector = 4,
     Float = 5,
     Integer = 6
 };

template <typename t>
t field(){
     t out;
     float* fOut;

     //Get the return type
     switch(getType(0)){ //This isn't needed, just ignore it :)
         case Integer:
            out = getInt(5);//int getInt(int test) { return test; }
         break;
         case Float:
            out = getFloat(1.7f);//int getFloat(float test) { return test; }
         break;
         case String:
            out = getString(":(");//int getString(char* test) { return test; }
         break;
         case Vector:
            getVector(0);//int getString(float* test) { return test; }
         break;
     }

     return out;
}

出于某种奇怪的原因,我收到了这些错误。我认为模板变量可以保存任何数据类型:L

【问题讨论】:

  • I thought a template variable can hold any data type你对什么是模板有误解。
  • 您的所有getXxx() 函数返回什么?他们需要返回一个t 类型的值。
  • @VMNova So should I do out = (t)getXxx() 。你真的想用这段代码完成什么?模板应该是类型安全的,因此不需要进行强制转换。事实上,switch 的全部内容都违背了模板的目的。
  • @VMNova 不要用向我们展示更多代码来描述。您编写代码的目的是什么?它当然不值得作为模板。好的模板代码不应该需要像那样测试什么类型。还不如创建一个重载函数并放弃模板。
  • @VMNova C# 不是 C++

标签: c++ templates type-conversion


【解决方案1】:

您只能将可转换为类型t 的类型分配给out

您已调用field&lt;char*&gt;(),因此您只能将类型转换为char*。您调用fieldchar* 确定out 的类型。

C++ 是strongly typed。不要让template 混淆您。编译器在编译时将其转换为常规外观函数。所以编译器实际上给出警告的代码如下所示:

char* field(){
     char* out;
     float* fOut;

     //Get the return type
     switch(getType(0)){ //This isn't needed, just ignore it :)
     case Integer:
        out = getInt(5);//int getInt(int test) { return test; }
     break;
     case Float:
        out = getFloat(1.7f);//int getFloat(float test) { return test; }
     break;
     case String:
        out = getString(":(");//int getString(char* test) { return test; }
     break;
     case Vector:
        getVector(0);//int getString(float* test) { return test; }
     break;
     }

     return out;
}

【讨论】:

  • 但我想返回一个int、float和float*类型。
  • But I want to return an int, float, and float* type. 如果outchar *,您将无法做到这一点。您的outt 类型,在field&lt;char *&gt; 的实例化中,t 变为char *
  • @VMNova 如果您阅读链接,您会发现强类型语言(如 C/C++)只能分配给转换为 char*out 类型。在您提供有关您正在尝试做的事情的更多信息之前,我们无法为您提供解决方案。 为什么您要分配给char*?你打算用它做什么。如果您只想获取值的string 表示,stringstream 可能是一个不错的选择。
猜你喜欢
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多