Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ const char*作为模板的参数_C++_Templates - Fatal编程技术网

C++ const char*作为模板的参数

C++ const char*作为模板的参数,c++,templates,C++,Templates,(问题扩展后答案完全改变) 问题是您搜索的值是一个const char*,但您搜索的数组是一个std::strings的数组。(好吧,我希望您在代码的某个地方使用了std,并且您使用的是标准字符串,而不是您自己的字符串。) 您需要像这样调用它: mybsearch(string(“peaches”),svals,slen)因为T被推断为const char*,所以您试图用string[]初始化const char*const[]。这是行不通的(数组只能在参数类型与参数类型基本相同的情况下传递给函

(问题扩展后答案完全改变)

问题是您搜索的值是一个
const char*
,但您搜索的数组是一个
std::string
s的数组。(好吧,我希望您在代码的某个地方使用了std,并且您使用的是标准字符串,而不是您自己的字符串。)

您需要像这样调用它:


mybsearch(string(“peaches”),svals,slen)

因为
T
被推断为
const char*
,所以您试图用
string[]初始化
const char*const[]
。这是行不通的(数组只能在参数类型与参数类型基本相同的情况下传递给函数,除了限定符)

你也可以

  • 一致使用C字符串,例如:

      string svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
      const int slen = sizeof(svals)/sizeof(string);
    
    不推荐

  • 使用C++字符串一致< /P>

    const char* svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
    
  • 将参数与mybsearch解耦(这样您就可以搜索不同于数组类型的元素,只要它们是可比较的)

    模板
    int myb搜索(T val,U const arr[],const int&size)
    

现在这个怎么样?编译器似乎抱怨const char*与字符串类型不匹配,这是错误的;在C++中没有常数引用类型,而 const >,当放置在一个类型的中间时,应用于站在左边的东西。@ JPaleCeOOP,你是对的,我把它与<代码> char和const 混合起来。将编辑或删除。谢谢。模板毕竟是正确的,但是调用不是。编译器抱怨什么?请发布错误消息。错误消息是?还有第四个选项:在调用时将
T
的类型显式指定为
string
mybsearch(“peaches”、svals、slen)
。编译器将使用适当的构造函数自动将
“peaches”
转换为
字符串。但是,请注意,将
T
指定为
const char*
将不起作用,因为没有从
string
const char*
的隐式转换,更不用说字符串数组了。我已经尝试通过像“U&arr”这样的引用传递数组来解耦参数。我还尝试将arr中的项类型转换为T类型,如“T temp=(T)arr[0]”,现在我尝试将“const char*”转换为字符串。
const char* svals[] = { "hello", "goodbye", "Apple", "pumpkin", "peaches" };
mybsearch(string("peaches"), svals, slen)
template < class T, class U>
int mybsearch(T val, U const arr[], const int &size)