Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 460
от 20.02.2004, 16:50

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1451
Отправлено ответов: 3010
Активность: 207.4 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Avl2k
Статус: Профессиональный
Общий рейтинг: 123.62
[Подробней >>]
Morgion
Статус: Опытный
Общий рейтинг: 107.27
[Подробней >>]
Бездомный
Статус: Начальный
Общий рейтинг: 125
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 108.61
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1446. Здравствуйте уважаемые эксперты. Недавно я начал программировать на С++ в "Microsoft Visual C++... (ответов: 2)
Вопрос № 1447. Здравствуйте. Есть переменная float Tem. Как мне проинтерпретировать её как longint или массив из 2-... (ответов: 3)

Вопросов: 2, ответов: 5


 Вопрос № 1446

Здравствуйте уважаемые эксперты. Недавно я начал программировать на С++ в "Microsoft Visual C++ 7 .NET". У меня к вам два вопроса:
1) Если что-либо объявить в H файле и включить этот файл в несколько CPP файлов, то линкер начинает ругаться, что мол то-то, то-то и то-то уже объявлено. Как с этим справится.
#pragma once
и
#ifndef module_h
#define module_h
//Код
#endif
не помогают.
2)Я начал делать класс String (исходник прилагается), но столкнулся с проблемой: странно работает перегруженный оператор "operator+". При попытке использовать его сначала происходит много "User Breakpoint", которых собственно User нигде не делал, затем "Debug assertion failed" (несколько штук), после этого программа работает нормально (строки складываются). При закрытии программы всё повторяется и заканчивается виндосовским сообщением об ошибке. Ничего не могу понять. Помогите пожалуйста!!!!


Приложение:


Вопрос отправлен: 16.02.2004, 21:21
Отправитель: Иван (mironov.ivan@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Avl2k

Приветствую Вас, Иван!
1. Это происходит потому, что Вы пишете в заголовках не _объявления_, а _определения_ переменных/функций. Например:
объявления:
extern int a;
void f();
определения:
int a;
void f() {}
2. Навскидку несколько ошибок:
a) String(int sz)
new не инициализирует выделяемую память, поэтому в выделенной строке - мусор, и она не заканчивается нулем
b) operator=(const char s)
аналогично - строка не заканчивается нулем
c) operator+(String& str) и другие
непонятные действия:
1) выделяем память под суммарную строку + 0 + лишний байт и запоминаем в s
2) добавляем к памяти по адресу Data данные второй строки (ошибка - память под эти данные там мы не выделяли) и запоминаем в s адрес Data.
3) создаем на стеке строку из s
4) удаляем s (ошибка - надо delete[] и вообще, фактически мы удаляем данные Data).
Совет:
1. Почитайте внимательней, что делает функция strcat
2. При удалении динамической памяти оператором delete не обязательно проверяться на NULL, это заложено в стандарте C++.
С уважением, Avl2k.


Ответ отправлен: 17.02.2004, 17:56
Отправитель: Avl2k


Отвечает Morgion

Добрый день, Иван!
1) Если линкер так ругается, значит на самом деле что-то уже объявлено- попробуй для своих класов/функций/данных использовать другие имена.
2) Не вникал в код, но ошибки сразу видны- массив неправильно удалаеш- не delete mass; а delete []mass;- это синтаксис удаления массива.
Мой тебе совет- не используй друзей- лучше явное преобразование типа из char* в String

Ответ отправлен: 17.02.2004, 13:11
Отправитель: Morgion


 Вопрос № 1447

Здравствуйте.
Есть переменная float Tem. Как мне проинтерпретировать её как longint или массив из 2-х элементов int или массив из 4-х элементов short int(желательно все случаи).
Аналогичная проблема если переменая задана динамически float *Tem = new float.
Заранее СПАСИБО.



Вопрос отправлен: 16.02.2004, 23:22
Отправитель: Алексей

[Следующий вопрос >>] [Список вопросов]

Отвечает Бездомный

Доброе время суток, Алексей!
Ну например вот так:):
float Tem = 1213;
long int x = Tem - 1200; // x = 13
long int y = Tem - 1201; // y = 12
---
Какой вопрос, такой ответ:)!

Ответ отправлен: 17.02.2004, 19:07
Отправитель: Бездомный


Отвечает Morgion

Добрый день, Алексей!
Можно либо использовать union либо преобразовывать указатели. См. прил.

Приложение:

Ответ отправлен: 17.02.2004, 13:21
Отправитель: Morgion


Отвечает vitya

Добрый день, Алексей!
long l = *(long *)&Tem;
int i[2];
memcpy(i, &Tem, sizeof(Tem));
short int даже под дос 2 байта.

Ответ отправлен: 18.02.2004, 11:40
Отправитель: vitya



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (25)
C / C++ (16)
Perl (3)
Builder / Delphi (19)
Pascal (20)
Basic / VBA (8)
Java / JavaScript (3)
PHP (13)
Криптография (6)
WinAPI (12)
Радиоэлектроника (7)
Пользователю
Windows 95/98/Me (39)
Windows NT/2000/XP (53)
"Железо" (33)
Поиск информации (14)
Администратору
Windows NT/2000/XP (28)
Linux / Unix (9)
Юристу
Гражданское право (16)
Семейное право (11)
Трудовое право (12)
КоАП (10)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное