|
|
Возраст: 38 C нами с 25.01.2005 Репутация: 133
|
|
Неоспоримым достоинством языка С++ является то, что он является языком одновременно и высокого и низкого уровней, что делает его незаменимым при разработке игр и других сложных и требовательных к производительности приложений.
P.S. Перед задаванием вопросов вроде "Что делает эта функция" настоятельно рекомендуется поизучать MSDN.
P.P.S. В ближайшее время выложу много литературы по этому вопросу.
|
|
|
|
|
|
|
|
Возраст: 37 C нами с 03.04.2006 Репутация: 73.7
|
|
Вот скажите я индус что-ли? посмотрите что тут может быть не так?
free_boundary::free_boundary(point pstn, point nrml, unsigned int np, double S, double T, double alpha)
{
....
this->nrml = nrml;
this->pstn = pstn;
this->np = np;
this->T = T;
....
} |
никак не могу понять почему не работает.
з.ы.смотри прикрепленную картинку!
з.ы.ы. глюк не только с pstn, но и с np...
з.ы.ы.ы. у структуры point перегружено несколько операторов, но operator= не перегружен.
|
_____________________________ "Если да, конечно нет" Futurama
debug1
pic1.jpg - Просмотров: 49
|
|
|
|
|
|
|
Возраст: 46 C нами с 19.08.2008 Репутация: 83.3
|
|
1. А входной pstn точно корректный?
2. Ну, оператора = нет, но может есть плохой конструктор вида point &point::point(const point &)?
3. А может быть просто объект this уже битый вусмерть? Запустите приложение под аналогом valgrind'а (не уверен, что он для Винды есть).
|
|
|
|
|
|
|
|
C нами с 15.04.2005 Репутация: 133.2
|
|
AAsad, а ещё неплохо бы посмотреть декларацию объекта free_boundary.
|
_____________________________ Время не существует, у него нет физического носителя в природе. Его выдумал человек, чтобы измерять скорость.
|
|
|
|
|
|
|
Возраст: 34 C нами с 16.04.2006 Репутация: 56.8
|
|
а в последнем (нижнем) примере в pstn x, y и z равны нулю? Фишка в том, что при работе с вещественными числами грубо говоря при присваивании может чуть-чуть потеряться точность. У присвоенных чисел в примере степень e-026, то есть 10^-26, то есть ооочень маленькое число, т.е. можно считать, что x, y и z равны нулю. При работе с вещественными (float или double) числами довольно часто такое происходит.
|
|
|
|
|
|
|
|
Возраст: 37 C нами с 03.04.2006 Репутация: 73.7
|
|
class free_boundary :
public boundary
{
private:
deque<cell> cells_ptr;
deque<cell>::iterator cell_iter;
unsigned int np;
double Vn;
double T;
double S;
static double erf(double x);
point V;
public:
void add_cell(deque<cell> *cluster_cells);
void set_np(unsigned int np);
int bondary_condition(deque<particle> *cluster_particle, double dt);
free_boundary(point pstn, point nrml, unsigned int np, double S, double T, double alpha);
free_boundary(void);
~free_boundary(void);
}; |
class boundary
{
private:
char type[6];
public:
point nrml;
point pstn;
virtual int bondary_condition(deque<particle> *a, double dt = 0) = 0;
void set_position(point a);
void set_normal(point a);
}; |
насчет нулей то там, pstn.x = -1, pstn.y = 0, pstn.z = 0;
а насчет this ща попробую разобраться.
а насчет конструктора, то вот класс point:
struct point
{
public:
double x, y, z;
public:
point(void);
point(double x, double y, double z);
~point(void);
void print();
double mod();
point set(double x, double y, double z);
friend point operator+(point a, point b);
friend double operator*(point a, point b);
friend point operator*(point a, double b);
friend point operator/(point a, double b);
friend point operator-(point a, point b);
friend point operator!(point a);
point vec_mult(point p1);
}; |
|
_____________________________ "Если да, конечно нет" Futurama
|
|
|
|
|
|
|
Возраст: 46 C нами с 19.08.2008 Репутация: 83.3
|
|
AAsad писал(а): |
friend point operator+(point a, point b);
friend double operator*(point a, point b);
friend point operator*(point a, double b);
friend point operator/(point a, double b);
friend point operator-(point a, point b);
friend point operator!(point a);
|
|
Сходу. Тут friend не нужен: класс тот же. Friend понадобится только для деклараций типа point operator*(double a, point b)
|
|
|
|
|
|
|
|
Возраст: 34 C нами с 16.04.2006 Репутация: 56.8
|
|
AAsad, Видимо, ошибка в this... Возможно, где-то какой-то указатель удаляется раньше времени... можно в дебагере посмотреть, какое значение this вообще имеет, и меняется ли оно по ходу выполнения... а как вы вызываете конструктор free_boundary? Можно ли полный код контруктора глянуть? и чем отличается верхний пример (который корректно выполняется) от нижнего?
|
|
|
|
|
|
|
|
Возраст: 37 C нами с 03.04.2006 Репутация: 73.7
|
|
вы про картинку? если да, то это остановка на брэйкпоинте из дэбагера(VisualStudio 2010). просто я хотел показать что this->pstn не хочет становиться равной pstn. кстати сейчас понял что присваивание происходит, но почему-то позже(может из-за оптимизации VS). я просто отлавливал другой баг и наткнулся на этот баг, думал что все из-за это не хочет работать. лан пойду дальше отлавливать жуков.
з.ы. tigra564, спасибо уже исправил, хотя и так работало:)
з.ы.ы. кстати с прогой иногда вообще непонятная фигня происходит, была у меня строчка if(nrml.x > 0){...}, так там nrml.x = -1, но прога упорно лезла внутрь ифа... я так и не понял почему... видимо где-то был глюк(может даже у меня в голове)
|
_____________________________ "Если да, конечно нет" Futurama
|
|
|
|
|
|
|
Возраст: 34 C нами с 16.04.2006 Репутация: 56.8
|
|
AAsad, да, вполне возможно, что из-за оптимизации... чтобы легче было дебажить, можно так написать:
free_boundary::free_boundary(point pstn, point nrml, unsigned int np, double S, double T, double alpha)
:
nrml (nrml),
pstn (pstn),
np (np),
...
{
...
}
Так лечгче будет понять, в какой момент инициализация атрибутов класса уже произошла
|
|
|
|
|
|
|
|
Возраст: 46 C нами с 19.08.2008 Репутация: 83.3
|
|
AAsad писал(а): |
может из-за оптимизации VS
|
Вполне возможно, что куча ваших присваиваний заменена на какой-нибудь вызов векторного копирования.
AAsad писал(а): |
была у меня строчка if(nrml.x > 0){...}, так там nrml.x = -1, но прога упорно лезла внутрь ифа...
|
Скомпилируйте без оптимизации. Наверняка после этого отладчик будет дело показывать.
|
|
|
|
|
|
|
|
C нами с 15.04.2005 Репутация: 133.2
|
|
AAsad, не отлаживайте программу скомпилированную с оптимизацией — граблей мильоны. Только в крайнем случае, если поведение оптимизированной и неоптимизированной отличается.
|
_____________________________ Время не существует, у него нет физического носителя в природе. Его выдумал человек, чтобы измерять скорость.
|
|
|
|
|
|
|
C нами с 09.08.2007 Репутация: 92.7
|
|
По умолчанию в дебаге оптимизация отключена. Да и, вероятно, VS ругалась бы, если бы не туда пыталась писать. А точно конфигурация дебаговская? Может релизовская, и в настройках не стоит генерация отладочной информации?
|
|
|
|
|
|
|
|
Возраст: 35 C нами с 08.09.2007 Репутация: 100.9
|
|
Рассказываю быстро и внятно Есть исходники, когда компилирую... требует "JvSystemC6R.lib" Где как и откуда мне эту библиотеку родить... Честно понятия не имею! И во избежании спама! ДА к поисковой системе Гугл я обращался... Как видите... Толку чуть! Кому нужна какая инф. я с радостью поделюсь, если это поможет делу!
Среда разработки C++ Builder 2010
|
_____________________________ Слушать радио Power FM 320 kbps
|
|
|
|
|
|
|
Возраст: 46 C нами с 19.08.2008 Репутация: 83.3
|
|
|
|
|
|
|
|
Возраст: 35 C нами с 08.09.2007 Репутация: 100.9
|
|
Если можно выложи-те!!! библиотеки JvSystemC6R.lib и JvCoreC6R.lib я найти их ни как не могу...
|
_____________________________ Слушать радио Power FM 320 kbps
|
|
|
|
|
|
|