为什么我从字符转换为字符时出错

Why I get error convert from char to char?

本文关键字:字符 出错 转换 为什么      更新时间:2023-10-16

这是我的代码:

#include <iostream>
using namespace std;
bool funkcja (char * a[3][7], char * b[7]);
int main()
{
    char T[3][7]={{'A', 'L', 'A', 'M','A', 'k', 'o'},
            {'M', 'A','M','K','O','T','A'},
            {'T', 'E','Q','U','I','L','A'}};
    char tab[7]={ 'A', 'L', 'A', 'M','A', 'k', 'o' }; 
    cout<<funkcja(T, tab)<<endl;
    return 0;
}
bool funkcja (char * a[3][7], char * b[7])
{
    int licznik=0;
    for (int i=0;i<3;i++)
    {
        for (int j=0; j<7;j++)
        {
                if (a[i][j]==b[j])
                {
                    licznik++;
                    if (licznik==7) return true;
                }
                else {
                    licznik=0;
                }
        }
        licznik=0;
    }
    return false;
}

当我尝试构建它时,我得到:

[错误] 无法将参数"1"的"char (*)[7]"转换为"char* (*)[7]"到"bool funkcja(char* (*)[7], char**)"

您的函数定义不正确。您需要更改:

bool funkcja (char * a[3][7], char * b[7])

自:

bool funkcja (char a[3][7], char b[7])

请注意,您可以省略第一个数组维度,因此可以将其减少为:

bool funkcja (char a[][7], char b[])

您的funkcja接受两个指针数组,但您正在向其传递字符数组。

您应该将签名更改为:

bool funkcja (char a[][7], char b[]);

传递的参数与funkcja中的参数类型之间存在类型不匹配。这在其他答案中也有解释。此外,您还可以通过引用传递数组,最简单的方法是使用模板。这样,您还可以在编译时传递它们的大小:

[直播]

#include <iostream>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
template<int N, int M>
bool funkcja (char (&a)[N][M], char (&b)[M]);
int main()
{
    char T[3][7]={{'A', 'L', 'A', 'M','A', 'k', 'o'},
            {'M', 'A','M','K','O','T','A'},
            {'T', 'E','Q','U','I','L','A'}};
    char tab[7]={ 'A', 'L', 'A', 'M','A', 'k', 'o' }; 
    cout<<funkcja(T, tab)<<endl;
    return 0;
}
template<int N, int M>
bool funkcja (char (&a)[N][M], char (&b)[M])
{
    int licznik=0;
    for (int i=0;i<N;i++)
    {
        for (int j=0; j<M;j++)
        {
                if (a[i][j]==b[j])
                {
                    licznik++;
                    if (licznik==M) return true;
                }
                else {
                    licznik=0;
                }
        }
        licznik=0;
    }
    return false;
}