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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2015, 20:27   #1
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию Ошибка E2034, как решить проблему?

Написана программа C++, все рабочее, только в 1 месте выходит какая то загвоздка. Кто может сказать что не так?
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <io.h>
#include <stdio.h>
#include <string.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
	struct TZap{
	   char FIO[30];
		int year, group, fiz, math, inf, him;
		float s_b;
	 } Zap;
int size = sizeof(TZap);
FILE *Fz;
AnsiString File_Zap;
void Out(TZap, TMemo*);


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Fz = fopen(File_Zap.c_str(),"ab");
	
strcpy(Zap.FIO,  Edit2->Text.c_str()); //место с ошибкой

		Zap.year = StrToInt(Edit1 -> Text);
		Zap.group = StrToInt(Edit3 -> Text);
		Zap.fiz = StrToInt(Edit4 -> Text);
		Zap.math = StrToInt(Edit5 -> Text);
		Zap.inf = StrToInt(Edit6 -> Text);
		Zap.him = StrToInt(Edit7 -> Text);

		Zap.s_b =StrToFloat(Edit8->Text);
Out(Zap, Memo1);
		fwrite(&Zap, size, 1, Fz);
		Edit1->Text=""; Edit2->Text=""; Edit3->Text=""; Edit4->Text="";
		Edit5->Text=""; Edit6->Text=""; Edit7->Text=""; Edit8->Text="";
		fclose(Fz);

}
Это часть кода, начало и место где ошибка "[bcc32 Error] Unit1.cpp(132): E2034 Cannot convert 'wchar_t *' to 'const char *'", после 5 кнопки второе предложение.

Последний раз редактировалось Dima-91; 01.07.2015 в 21:39.
Dima-91 вне форума Ответить с цитированием
Старый 01.07.2015, 21:13   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

код не смотрел, читал ошибку.
Цитата:
Cannot convert 'wchar_t *' to 'const char *'
потому и не может, что вчар - два байта, а чар - однобайтный.
и еще модификатор конст иногда требует явного приведения.
Smogg вне форума Ответить с цитированием
Старый 01.07.2015, 21:32   #3
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Так дело в том, что если в ручную прописать
Код:
int i, len;
String ss;
ss =  Edit2->Text;
len = ss.Length();
for(i = 1; i <=len; i++ )
Zap.FIO[i-1] = ss[i];
Zap.FIO[len]  = '\0';
Все работает. Но интересен вопрос как используя внутреннию функцию заставить работать программу, т.е. "strcpy"
Dima-91 вне форума Ответить с цитированием
Старый 01.07.2015, 21:34   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
после 5 кнопки второе предложение.
5 шагов на север от старой берёзы, от забора и до обеда.
обозначь место прямо в коде, тебе трудно штоль?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.07.2015, 21:40   #5
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Спасибо за критику, исправил, надеюсь стало понятнее.
Dima-91 вне форума Ответить с цитированием
Старый 01.07.2015, 21:43   #6
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

читай про приведение типов
Smogg вне форума Ответить с цитированием
Старый 01.07.2015, 21:51   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Код:
	struct TZap{
	   wchar FIO[30]; // если не нужна обратная совместимость
		int year, group, fiz, math, inf, him;
		float s_b;
	 } Zap;
Но ещё лучше - сделать FIO динамическим массивом, т.е. простой си-строкой (с нулём в конце). это секвестирует информационную избыточность в создаваемых файлах.
заодно научишься работать с динамическими переменными.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.07.2015, 21:52   #8
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от Smogg Посмотреть сообщение
читай про приведение типов
Если не сложно литературу подскажите, я в этом дело новичёк, и Ваша фраза ставит в тупик, т.к. приведение типов для меня звучит как int=int, char=char + компилятор сам приводит к нужным по необходимости, при различных операциях...

Последний раз редактировалось Dima-91; 01.07.2015 в 22:08.
Dima-91 вне форума Ответить с цитированием
Старый 01.07.2015, 21:54   #9
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Код:
	struct TZap{
	   wchar FIO[30]; // если не нужна обратная совместимость
		int year, group, fiz, math, inf, him;
		float s_b;
	 } Zap;
Но ещё лучше - сделать FIO динамическим массивом, т.е. простой си-строкой (с нулём в конце). это секвестирует информационную избыточность в создаваемых файлах.
заодно научишься работать с динамическими переменными.
Если мне нужно после использовать данные fiz, math, inf, him, и выводить после этого необходимое FIO, будет ли это обратной совместимостью?
wchar не поддерживает - "[bcc32 Error] Unit1.cpp(16): E2303 Type name expected"
Dima-91 вне форума Ответить с цитированием
Старый 01.07.2015, 22:05   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Если мне нужно после использовать данные fiz, math, inf, him, и выводить после этого необходимое FIO, будет ли это обратной совместимостью?
забей. это не имеет отношения к обратной совместимости. Здесь под обр.совм. я подразумеваю возможность читать файлы, созданные старой версией программы, новой версией этой программы. Если поменять тип поля структуры, то изменится формат выходных файлов.
Цитата:
Если не сложно литературу подскажите, я в этом дело новичёк, и Ваша фраза ставит в тупик, т.к. приведение типов для меня звучит как int=int, char=char + компилятор сам приводит к нужным по необходимости, при различных опирациях...
Этого у нас, как грязи.

опирациях, твоюмать... откуда ж вас таких аисты приносят... опираторов...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
idhttp Not Connected как решить проблему? jone Мультимедиа в Delphi 7 02.06.2013 16:17
Как решить проблему со связями? GinIvan Помощь студентам 3 13.03.2012 20:46
ВПР не подходит. Как решить проблему? Vladislav_Dmitriev Microsoft Office Excel 5 23.01.2012 17:37
Как решить проблему двух серверов? Томбмастер Компьютерное железо 0 30.09.2009 21:49
Как решить проблему с массивом? Dem80 Общие вопросы C/C++ 0 15.03.2009 17:05