Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/20: Рейтинг темы: голосов - 20, средняя оценка - 4.75
EragonJKee
9 / 10 / 2
Регистрация: 19.01.2014
Сообщений: 83
1

Ошибка "аргумент типа char несовместим с параметром типа char*"

18.05.2015, 21:57. Просмотров 4058. Ответов 8
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
using namespace std;
const int N=4; //размер очереди
 
struct Queue
{
int data[N]; //массив данных
char data_1[N];
int last; //указатель на начало
};
 
void Creation(Queue *Q) //создание очереди
{ Q->last=0; }
 
bool Full(Queue *Q) //проверка очереди на пустоту
{
if (Q->last==0) return true;
else return false;
}
 
void Add(Queue *Q) //добавление элемента
{
if (Q->last==N)
{ cout<<"\nОчередь заполнена\n\n"; return; }
 
int value;
char value2[50];
 
cout<<"\nЗначение > "; 
cin>>value;
 
cout<<"\nЗначение 2 > "; 
fflush(stdin);
gets(value2);
 
Q->data[Q->last++]=value;
strcpy(Q->data_1[Q->last++],value2);
 
cout<<endl<<"Элемент добавлен в очередь\n\n";
}
 
void Delete(Queue *Q) //удаление элемента
{
for (int i=0; i<Q->last && i<N; i++) //смещение элементов
Q->data[i]=Q->data[i+1]; Q->last--;
}
int Top(Queue *Q) //вывод начального элемента
{ return Q->data[0]; }
int Size(Queue *Q) //размер очереди
{ return Q->last; }
void main() //главная функция
{
setlocale(LC_ALL,"Rus");
Queue Q;
Creation(&Q);
char number;
do
{
cout<<"1. Добавить элемент"<<endl;
cout<<"2. Удалить элемент"<<endl;
cout<<"3. Вывести верхний элемент"<<endl;
cout<<"4. Узнать размер очереди"<<endl;
cout<<"0. Выйти\n\n";
cout<<"Номер команды > "; cin>>number;
switch (number)
{
case '1': Add(&Q);
break;
//-----------------------------------------------
case '2':
if (Full(&Q)) cout<<endl<<"Очередь пуста\n\n";
else
{
Delete(&Q);
cout<<endl<<"Элемент удален из очереди\n\n";
} break;
//-----------------------------------------------
case '3':
if (Full(&Q)) cout<<endl<<"Очередь пуста\n\n";
else cout<<"\nНачальный элемент: "<<Top(&Q)<<"\n\n";
break;
//-----------------------------------------------
case '4':
if (Full(&Q)) cout<<endl<<"Очередь пуста\n\n";
else cout<<"\nРазмер очереди: "<<Size(&Q)<<"\n\n";
break;
//-----------------------------------------------
case '0': break;
default: cout<<endl<<"Команда не определена\n\n";
break;
}
} while(number!='0');
system("pause");
}
Пытаюсь здесь прикрутить массив (см. data_1[N] и value2[50]), но выбивает ошибку о том, что "аргумент типа char несовместим с параметром типа char*".

Я изменил строчку

C++
1
char data_1[N];
на

C++
1
char* data_1[N];
Ошибка пропадает, но во время компиляции (вернее во время добавления элемента) программа крашится.

Что я делаю не так? Подскажите, пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2015, 21:57
Ответы с готовыми решениями:

Ошибка аргумент типа "char" несовместим с параметром типа "LPCSTR"
char result; result=printf(&quot;%d %d&quot;, &quot;test.php?id=&quot;,id); HINTERNET...

Аргумент типа "unsigned char*" несовместим с параметром типа "const char*"
int f(unsigned char s, unsigned char q) { N = strlen(s); //Ошибка тут... M...

"Аргумент типа char несовместим с параметром типа const char"
Программа должна перевести все символы до * в число,но что то пошло не так. ...

Аргумент типа "const char*" несовместим с параметром типа "LPCWSTR"
хочу запустить paint с visual studio но выдает ошибку под словами open,...

Аргумент типа "char *" несовместим с параметром типа "LPCWSTR"
Что такое и с чем его едят 1 IntelliSense: аргумент типа &quot;char *&quot; несовместим...

8
tabolin_andrey
6 / 6 / 3
Регистрация: 05.12.2014
Сообщений: 22
18.05.2015, 22:22 2
strcpy(Q->data_1[Q->last++],value2);
ты в функции Add(Queue *Q) пытаешься засунуть строку в 1 ячейку массива. сделай так:

C++
1
strcpy(Q->data_1,value2);
2
EragonJKee
9 / 10 / 2
Регистрация: 19.01.2014
Сообщений: 83
19.05.2015, 15:13  [ТС] 3
Хорошо, поменял. Теперь пытаюсь проверить введенное значение здесь:

C++
1
2
int Top(Queue *Q) //вывод начального элемента
{ return Q->data_1[0]; }
Выдает белиберду, т.к. по сути мне надо передать всю строку в эту ячейку массива:

C++
1
Q->data[Q->last++]
Может есть идеи как поступить?
0
tabolin_andrey
6 / 6 / 3
Регистрация: 05.12.2014
Сообщений: 22
19.05.2015, 15:55 4
Лучший ответ Сообщение было отмечено EragonJKee как решение

Решение

Я добавил пару строк, соблюдая твою логику. Проверь, то ли это, что ты хотел получить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
 
using namespace std;
const int N=4; //размер очереди
 
struct Queue
{
    int data[N]; //массив данных
    char data_1[N][50];  //---------------Вот тут -----------------
    int last; //указатель на начало
};
 
void Creation(Queue *Q) //создание очереди
{ 
    Q->last=0; 
}
 
bool Full(Queue *Q) //проверка очереди на пустоту
{
    if (Q->last==0) return true;
    else return false;
}
 
void Add(Queue *Q) //добавление элемента
{
    if (Q->last==N) { 
        cout<<"\nОчередь заполнена\n\n"; 
        return; 
    }
 
    int value;
    char value2[50];
 
    cout<<"\nЗначение > "; 
    cin>>value;
 
    cout<<"\nЗначение 2 > "; 
    fflush(stdin);
    gets(value2);
 
    Q->data[Q->last] = value;               //---------------Вот тут -----------------
    strcpy(Q->data_1[Q->last],value2);  //---------------Вот тут -----------------
 
    Q->last++;                                    //---------------Вот тут -----------------
 
    cout<<endl<<"Элемент добавлен в очередь\n\n";
}
 
void Delete(Queue *Q) //удаление элемента
{
    for (int i=0; i<Q->last && i<N; i++) //смещение элементов
    Q->data[i]=Q->data[i+1]; Q->last--;
}
 
void Top(Queue *Q) //вывод начального элемента     //---------------Вот тут функцию переделал немного-----------------     
{ 
    cout << Q->data[Q->last-1] << endl;
    cout << Q->data_1[Q->last-1] << endl;
}
 
int Size(Queue *Q) //размер очереди
{ 
    return Q->last; 
}
 
 
void main() //главная функция
{
    setlocale(LC_ALL,"Rus");
    Queue Q;
    Creation(&Q);
    char number;
    do
    {
        cout<<"1. Добавить элемент"<<endl;
        cout<<"2. Удалить элемент"<<endl;
        cout<<"3. Вывести верхний элемент"<<endl;
        cout<<"4. Узнать размер очереди"<<endl;
        cout<<"0. Выйти\n\n";
        cout<<"Номер команды > "; cin>>number;
        switch (number)
        {
        case '1': 
            Add(&Q);
            break;
        //-----------------------------------------------
        case '2':
            if (Full(&Q)) cout<<endl<<"Очередь пуста\n\n";
            else
            {
                Delete(&Q);
                cout<<endl<<"Элемент удален из очереди\n\n";
            } 
            break;
        //-----------------------------------------------
        case '3':
            if (Full(&Q)) cout<<endl<<"Очередь пуста\n\n";
            else {
                Top(&Q);            //---------------Вот тут -----------------
                cout << "\n\n";
            }
            break;
        //-----------------------------------------------
        case '4':
            if (Full(&Q)) cout<<endl<<"Очередь пуста\n\n";
            else cout<<"\nРазмер очереди: "<<Size(&Q)<<"\n\n";
            break;
        //-----------------------------------------------
        case '0': break;
            default: cout<<endl<<"Команда не определена\n\n";
            break;
        }
    } while(number!='0');
 
    system("pause");
}
1
EragonJKee
9 / 10 / 2
Регистрация: 19.01.2014
Сообщений: 83
19.05.2015, 15:57  [ТС] 5
Хмм, да, это то, что я хотел получить, спасибо, буду разбираться.
0
tabolin_andrey
6 / 6 / 3
Регистрация: 05.12.2014
Сообщений: 22
19.05.2015, 16:03 6
Лучший ответ Сообщение было отмечено EragonJKee как решение

Решение

Ты только перезалей её, я 59 строку удалил, где было Q->last++ - оно лишнее.
1
EragonJKee
9 / 10 / 2
Регистрация: 19.01.2014
Сообщений: 83
19.05.2015, 16:15  [ТС] 7
Проблема в том, что при выводе функции Top, должны выводиться первые записи в очереди, а не последние. Ставлю [0], но потом идет проблема с удалением..

Добавлено через 3 минуты
Вот:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Delete(Queue *Q) //удаление элемента
{
    for (int i=0; i<Q->last && i<N; i++){ //смещение элементов
    Q->data[i]=Q->data[i+1]; 
    Q->data_1[i][50]=Q->data_1[i+1][50]; 
    Q->last--;
    }
}
 
void Top(Queue *Q) //вывод начального элемента     //---------------Вот тут функцию переделал немного-----------------     
{ 
    cout << Q->data[0] << endl;
    cout << Q->data_1[0] << endl;
}
удаляет только int, char как будто на месте стоит

Добавлено через 4 минуты
А вот использовал strcpy и все заработало.. Ужс
0
tabolin_andrey
6 / 6 / 3
Регистрация: 05.12.2014
Сообщений: 22
19.05.2015, 16:17 8
Лучший ответ Сообщение было отмечено EragonJKee как решение

Решение

Цитата Сообщение от EragonJKee Посмотреть сообщение
Q->data_1[i][50]=Q->data_1[i+1][50];
ты пытаешься приравнять 1 ячейку двухмерного массива к другой =) используй strcpy:
C++
1
strcpy(Q->data_1[i], Q->data_1[i+1]);
1
EragonJKee
9 / 10 / 2
Регистрация: 19.01.2014
Сообщений: 83
19.05.2015, 21:15  [ТС] 9
Сделал все, спасибо большое за помощь!
0
19.05.2015, 21:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2015, 21:15

Аргумент типа char (*)[1000] несовместим с параметром типа char**
Здравствуйте! Есть вот такая структура: #define max 1000 struct expr {...

"char" несовместим с параметром типа "const char *"
Часто встречаю такую проблему: аргумент типа &quot;char&quot; несовместим с параметром...

аргумент "const char *" несовместим с параметром "char*"
#include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;cstdlib&gt; class String {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru