Невозможно преобразовать char (*) [200] в char ** - PullRequest
1 голос
/ 29 сентября 2019
#include <iostream>
#include <string.h>

using namespace std;

void ArrayTimesThree(char*, const char*);

int main()
{
    char s1[200], s2[200], circleword[200];
    cin.getline(s1, 200);
    cin.getline(s2, 200);

    ArrayTimesThree(circleword, s1);
    cout<<circleword[1];
}

void ArrayTimesThree(char *dest[], char *source[])
{
    *dest[0] = NULL;
    strcat(*dest, *source);
    strcat(*dest, *source);
    strcat(*dest, *source);
}

main.cpp | 21 | ошибка: невозможно преобразовать 'char (*) [200]' в 'char **' для аргумента '1' в 'void ArrayTimesThree (char **, char *)*) '

Ответы [ 2 ]

2 голосов
/ 29 сентября 2019

Вы передаете ArrayTimesThree символ *, однако в сигнатуре метода вы указываете, что он должен ожидать символ **. Не забывайте, что использование оператора [] считается разыменованием. Попробуйте это:

#include <iostream>
#include <string.h>

using namespace std;

void ArrayTimesThree(char*, char*);

int main()
{
    char s1[200], s2[200], circleword[200];
    cin.getline(s1, 200);
    cin.getline(s2, 200);

    ArrayTimesThree(circleword, s1);
    cout<<circleword[1];

    return 0;
}

void ArrayTimesThree(char *dest, char source[])
{
    dest[0] = '\0';
    strcat(dest, source);
    strcat(dest, source);
    strcat(dest, source);
}

Отказ от ответственности: я не уверен, что именно вы ожидаете от этого кода, поэтому я не могу гарантировать, что логика верна;однако, это позаботится о ваших ошибках компилятора и, похоже, будет правильно работать при написании кода.

1 голос
/ 29 сентября 2019

Проблема действительно в том, что ваше первоначальное объявление из ArrayTimesThree (что является "правильным") не соответствует определению вы потом дадите (что на самом деле неправильно). Измените ваше определение, как показано ниже, и оно работает:

void ArrayTimesThree(char* dest, const char* source) // Needs to be the same as in the previous declaration!
{
    dest[0] = '\0';   // Don't assign a string pointer to NULL! Instead, set its first character to the nul character
//  strcpy(dest, ""); // ALternatively, use strcpy with an empty string to clear "dest"
    strcat(dest, source); // strcat takes char* and const char* arguments ...
    strcat(dest, source); // ... so there is no need to 'deference the values ...
    strcat(dest, source); // ... now that the argument types have been 'corrected'
}

Кстати, я заметил, что входное значение для s2 в вашей функции main фактически никогда не используется ... это то, что вы намереваетесь, пока?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...