错误:转换无效

时间:2013-12-11 13:30:42

标签: c++

我是C ++的新手,这是我不断得到的错误,我不知道它是什么。它表示在显示功能行。它有这个错误 从'char'无效转换为'char *'[-fpermissive] | 我可以知道这个错误是什么意思以及如何解决它?

void passChar()
{
    char letter[] = {'H','E','L','L','O','!'};
    for(int i = 0; i<6; i++)
    {
        while(true)
        {
            display(letter[i]);
            swapLetter(letter[i]);
        }
    }



} 

这是我的显示功能

void display(char letter[])
{
    for(int i = 0 ; i<6 ; i++)
    {
        switchStatement(letter[i]);
    }
}

这是我的交换功能

void swapLetter(char letter[])
{
    char temp = letter[0];
    for(int i = 1; i < 6; i++)
    {
        letter[i-1] = letter[i];
    }
    letter[5]= temp;
}

我的目标是为hello这个词设置无限循环。

3 个答案:

答案 0 :(得分:0)

这意味着您将char作为参数传递给期望char*的函数。

您的函数实际上希望您传递整个字符串而不是单个字符。所以你的代码应该是:

display(letter);
swapLetter(letter);

当然,我怀疑在passChar中呈现外环是没有意义的。无限while(true)循环似乎很奇怪,尽管你在问题中声称它是故意的。在这种情况下,代码应为:

void passChar()
{
    char letter[] = {'H','E','L','L','O','!'};
    while(true)
    {
        display(letter);
        swapLetter(letter);
    }
} 

我个人认为我会将displayswapLetter编码为接受char*并使用null-terminator来检测长度。

void passChar()
{
    char letter[] = "HELLO!";
    while(true)
    {
        display(letter);
        swapLetter(letter);
    }
} 

然后修改displayswapLetter以使用null-terminator来定位字符串的结尾。

答案 1 :(得分:0)

大概是因为您的display()函数如下所示:

void display(char* value)
{ }

letter[i]的类型为char,上述函数需要char* ...

答案 2 :(得分:0)

您的代码整体无效,因为此循环

    while(true)
    {
        display(letter[i]);
        swapLetter(letter[i]);
    }
除非display或swapLetter没有调用exit,否则

是无限的。

至于错误,那么从错误消息中可以明显看出函数期望得到一些字符串而不是字符。所以它的参数被声明为char s []或char * s,或const char s [],或const char * s等等。 即使你将它的数组字母传递给它也是一个错误,因为你的数组没有终止零。我认为你应该将你的数组声明为

char letter[] = {'H','E','L','L','O','!', '\0'};

或者功能显示应声明为

void display( char c );