Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2012, 17:47   #1
Rock145
Пользователь
 
Регистрация: 29.06.2012
Сообщений: 19
Восклицание Забавная ошибка

Я писал аутентификацию для своего месседжера. И все бы хорошо,но есть две ошибки для функций wcscpy и wcscat. Ошибки такие:Cannot convert 'wchar_t *[30]' to 'wchar_t *' и Type mismatch in parameter '__dest' (wanted 'wchar_t *', got 'wchar_t * *'). Что же значит * *?кто может помогите или перенаправте) Заранее спасибо.

Код процедуры прилагается:
Код:
bool auth (wstring &s)
{
	wchar_t *loginin[30];
	wchar_t *passin[30];
	wchar_t *passisw[30];
	string passiss[30];
	int i, temp;
	i=2;
	wchar_t *s1;
	swprintf(s1, L"%S", "`");
	//s=s.c_str();
	while (wcscmp(&s[i],s1)!=0)
		{
			if (i==2) {
				wcscpy(loginin, s[i]);
			} else { wcscat(loginin, s[i]);     }
			i++;
		}
	i++;
	temp=i;
	while (wcscmp(&s[i],s1)!=0)
		{
			if (i==temp) {
				wcscpy(passin,s[i]);
			} else { wcscat(passin, &s[i]);     }
			i++;
		}
	wchar_t *path[59];
	wcscpy(path,_T("D:\\My Documents\\icq\\base\\"));
	wcscat(path,loginin);
	ifstream ifs(_tfopen(path,_T("rb")));
	getline (ifs,passiss);
	for (i =0;i < 29; i++) {
			if (i==1) {
				wcscpy(passisw, passiss[i]);
			} else { wcscat(passisw, passiss[i]);     }
			i++;
	}
	if (wcscmp(passin,passisw)==0) {
		return 1;
	}
	else return 0;
}
P.S. в каждой отмеченной зеленым строке две вышеупомянутые ошибки!

Последний раз редактировалось Rock145; 29.06.2012 в 18:39.
Rock145 вне форума Ответить с цитированием
Старый 29.06.2012, 17:55   #2
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Объявите переменные не *%name%[30], а %name%[30]. Вы же фактически объявляете указатель на на указатель.
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Старый 29.06.2012, 18:01   #3
Rock145
Пользователь
 
Регистрация: 29.06.2012
Сообщений: 19
По умолчанию

Да пробовал я так. Тогда ошибка выглядят так:Cannot convert 'int' to 'const wchar_t *' и Type mismatch in parameter '__src' (wanted 'const wchar_t *', got 'wchar_t').
Rock145 вне форума Ответить с цитированием
Старый 29.06.2012, 18:02   #4
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Укажите строки, на которых валится компиляция. Я сегодня Шар Судьбы дома забыл.
P.S. Есть такой тег - CODE. Обрамляете в него код и читаемость улучшается.
Пол-жизни сидючи, в монитор глядючи...

Последний раз редактировалось Last; 29.06.2012 в 18:05.
Last вне форума Ответить с цитированием
Старый 29.06.2012, 18:06   #5
Rock145
Пользователь
 
Регистрация: 29.06.2012
Сообщений: 19
По умолчанию

по просьбе, строчки,на которых валится компиляция, выделены зеленым

Цитата:
Укажите строки, на которых валится компиляция. Я сегодня Шар Судьбы дома забыл.
P.S. Есть такой тег - CODE. Обрамляете в него код и читаемость улучшается.
Спасибо!

Последний раз редактировалось Rock145; 29.06.2012 в 18:11.
Rock145 вне форума Ответить с цитированием
Старый 29.06.2012, 18:28   #6
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Rock145 Посмотреть сообщение
Да пробовал я так. Тогда ошибка выглядят так:Cannot convert 'int' to 'const wchar_t *' и Type mismatch in parameter '__src' (wanted 'const wchar_t *', got 'wchar_t').
Какая ошибка на какой именно строке? Я ждал примерно такого ответа:
Цитата:
Код:
 code code code //(1)
В строке (1) такая-то ошибка.
Type mismatch in parameter '__src' (wanted 'const wchar_t *', got 'wchar_t').
Можно попробовать подсунуть &variable вместо variable в строке, где возникает эта ошибка.
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Старый 29.06.2012, 18:40   #7
Rock145
Пользователь
 
Регистрация: 29.06.2012
Сообщений: 19
По умолчанию

Цитата:
Какая ошибка на какой именно строке? Я ждал примерно такого ответа:
читайте обновление к вопросу.

Цитата:
Type mismatch in parameter '__src' (wanted 'const wchar_t *', got 'wchar_t').
Можно попробовать подсунуть &variable вместо variable в строке, где возникает эта ошибка.
пробовал.это вызывает еще кучу ошибок. могу скинуть подробную информацию,если это потребуется.

Цитата:
Объявите переменные не *%name%[30], а %name%[30]. Вы же фактически объявляете указатель на на указатель.
а где там указатель на на указатель?

Последний раз редактировалось Rock145; 29.06.2012 в 18:44.
Rock145 вне форума Ответить с цитированием
Старый 29.06.2012, 18:47   #8
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Меняйте свои объявления на:
Код:
wchar_t loginin[30];
wchar_t passin[30];
wchar_t passisw[30];

wchar_t path[59];
Где теперь возникают ошибки и какие?

Цитата:
а где там указатель на на указатель?
wchar_t loginin[30]; - указатель на начало блока памяти длиной в 30 sizeof(wchar_t).
Соответственно
wchar_t *loginin[30]; - указатель на указатель на начало блока памяти длиной в 30 sizeof(wchar_t).
Пол-жизни сидючи, в монитор глядючи...

Последний раз редактировалось Last; 29.06.2012 в 18:55.
Last вне форума Ответить с цитированием
Старый 29.06.2012, 18:55   #9
Rock145
Пользователь
 
Регистрация: 29.06.2012
Сообщений: 19
По умолчанию

угу. поменяли. в тех же строках(зеленых) возникают ошибки (в каждой строке): Cannot convert 'int' to 'const wchar_t *' и Type mismatch in parameter '__src' (wanted 'const wchar_t *', got 'wchar_t').

если написать так( к примеру):
Код:
wcscpy(&loginin, s[i]);
то возникают ошибки: Cannot convert 'wchar_t[30]' to 'wchar_t *' и Type mismatch in parameter '__dst' (wanted 'wchar_t *', got 'wchar_t ( *)[30]') (тоже в каждой выделенной строчке)

Последний раз редактировалось Rock145; 29.06.2012 в 19:00.
Rock145 вне форума Ответить с цитированием
Старый 29.06.2012, 19:04   #10
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Rock145 Посмотреть сообщение
если написать так
Код:
wcscpy(&loginin, s[i]);
то возникают ошибки: Cannot convert 'wchar_t[30]' to 'wchar_t *' и Type mismatch in parameter '__dst' (wanted 'wchar_t *', got 'wchar_t ( *)[30]') (тоже в каждой выделенной строчке)
Смотрите.
Объявляем loginin
Код:
wchar_t loginin[30];  //loginin - указатель
s - указатель. s[i] -конкретная переменная типа wstring;
Из msdn:
Цитата:
wchar_t *wcscpy(
wchar_t *strDestination,
const wchar_t *strSource );
Функция принимает на вход два указателя.
Попробуйте
Код:
wcscpy(&loginin[i], &s[i]);
Т.к. если вы делаете такой вызов:
Код:
wcscpy(loginin, &s[i]);
то на всех шагах цикла копируете s[i] в loginin[0].
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Очень забавная проблема столкнулся впервые!!!! o8en Помощь студентам 1 01.07.2011 19:57
Забавная регулярка Necare Помощь студентам 0 10.04.2011 20:28
Забавная и малоизвестная особенность работы с массивами в Pascal/Delphi Serge_Bliznykov Паскаль, Turbo Pascal, PascalABC.NET 5 29.09.2010 12:00
Забавная вишка в StringGrid artemavd Общие вопросы Delphi 4 25.07.2009 16:48