两个人 发表于 2015-5-10 17:05:54

类型实参与类型形参不兼容!!求解决

#include "stdafx.h"

#include<iostream>
using namespace std;
template <typename t,typename t1>
t* hs(t a[],t1 b);
template <>char* hs(char a[],int b);
int main()
{
        char *ip[]={"acx","qdasdcxwq","qwaazs","qwdax","oiuhuhsxaih9i"};
        int d=5;
        hs(ip,d);
        cin.get();
        return 0;
}
template<>char*hs(char a[],int b)
{
        for(int l=0;l<5;l++)
        {
                cout<<strlen(a);//编译器提示:类型实参与类型形参不兼容。想不出来哪里出了问题!!!!
        }
}

ANDES 发表于 2015-5-13 18:16:14

template<>char*hs(char a[],int b)这是你的定义的函数,(char a[],int b)这个就是形参, char *ip[]={"acx","qdasdcxwq","qwaazs","qwdax","oiuhuhsxaih9i"};这是你调用你写的函数,"acx","qdasdcxwq","qwaazs","qwdax","oiuhuhsxaih9i"这个是实参,你的实参用5个,你的形参实际上才定义(char a[],int b)两个,即a[]和b,而且定义的类型还不同,一个字符型,一个整型,而你实参里面都是一些字符型。所以问题就知道出现在哪了,建议把形参和实参再看一遍。
PS:你的代码,特别是template <>char* hs(char a[],int b)这个名字,真不是一般的。。。

仰望天上的光 发表于 2015-5-13 20:42:28

参数char a[]
所以a类型是char
而strlen()函数的参数类型是char*,不是char.
所以strlen(a)报错
页: [1]
查看完整版本: 类型实参与类型形参不兼容!!求解决