C++ argument of type * is incompatible with parameter of type **

c++
63,304

Solution 1

You're trying to pass newArr (a char *) into isPalindrome() (which takes a char **). This is what "argument of type 'char*' is incompatible with parameter of type 'char**'" means.

To fix this, simply pass in a char **; you can do this by passing in the address of newArr instead of newArr itself:

tOf = isPalindrome(&newArr, numb); //calling of function

Solution 2

Brief Change the function signature (both definition and declaration) of the function to

bool isPalindrome(char* newArr, int numb);

Call it tOf = isPalindrome(newArr, numb);

Detail

If you call isPalindrome(newArr, numb). you are passing address of the first element either &newArr[0] . So you are function defination should be able to pick the address of the element. hence *newArr

Further your function will validate the details by using array arithmetic. which is all right .

Output

$ ./a.out
This program tests if a word/phrase is palindrome.

Please enter your phrase (just letters and blanks, please):

Palindrome

No, the phrase is not a palindrome!
$ ./a.out
This program tests if a word/phrase is palindrome.

Please enter your phrase (just letters and blanks, please):

YeseY

Yes, the phrase is a palindrome!

$

Share:
63,304
Maina Aoita
Author by

Maina Aoita

Updated on May 25, 2021

Comments

  • Maina Aoita
    Maina Aoita about 3 years

    Hello I'm new to c++ and can't figure out why my code is doing this. I've scoured across the internet and can't find the solution I need. I appreciate all the help. The line that's giving me the problem is when I'm calling the function. According to visual studios it states that "argument of type 'char*' is incompatible with parameter of type 'char**'". It's referring to newArr.

    #include <iostream>
    #include <string>
    #include <stdio.h>
    #include <ctype.h>
    #include "stdafx.h"
    
    using namespace std;
    
    bool isPalindrome(char *newArr[], int);
    
    //int i = 0;
    //char phrase; 
    //char c;
    bool palindrome;
    bool tOf;
    int numb;
    char c;
    
    const int length = 80; //const so that it can't be changed
    char inarr[length]; //array set to a const length of 80
    char newArr[length]; //array that will have no spaces
    
    string str;
    
    int main()
    {
    
        cout << "This program tests if a word/phrase is palindrome.\n\n";
        cout << "Please enter your phrase (just letters and blanks, 
    please):\n\n";
    
        cin.getline(inarr, length);
        //cout << array; //spits out the array
        str = inarr; //turn into string
        numb = str.length();
        //cout << numb << "\n"; //how many characters in array
    
        for (int i = 0; i < (numb / 2) + 1; i++)
        {
    
            for (int j = 0; j < (numb / 2) + 1; j++)
            {
                newArr[j] = inarr[i];   //from old array to new array   
    
                c = newArr[j];
                newArr[j] = toupper(c); //change to all upper case
    
                                    //cout << newArr[j];
                i += 2; //goes to every other index to skip space in string
            }
    
        }
    
        tOf = isPalindrome(newArr, numb); //calling of function
    
        if (tOf == true) //the response to true or false
        {
            cout << "\nYes, the phrase is a palindrome!";
        }
        else
        {
            cout << "\nNo, the phrase is not a palindrome!";
        }
    
        return 0;
    
    }
    
    bool isPalindrome(char *newArr[], int numb) //function to determine true or 
    false
    {
        for (int i = 0; i < (numb / 2) + 1; i++) //within the array...
        {
            if (newArr[i] != newArr[(numb / 2) - i]) //if first index != last 
    and etc (iterates)
            {
                palindrome = false;
            }
            else
            {
                palindrome = true;
            }
        }
        return palindrome;
    }