[C++] Доступ к объекту

pavlova

Точнее к полю объекта:

#include <ostream.h>
class xyu
{

public:
int xyu_i;
void put_xyu(int i){xyu_i=i;}
int * get_xyu{return & xyu_i;}
};
void pizda(xyu Xyu,int n)
{
Xyu.put_xyu(n);
cout<<(*Xyu.get_xyu<<endl;
}
int main
{
xyu Xyu1;
pizda(Xyu1,3);
cout<<(*Xyu1.get_xyu<<endl;
return 0;
}
Вывод:
3
108560123

Почему-то в main у меня нет доступа к xyu_i. Все компилируется без ошибок (пользуюсь компилятором g++-3.2.2). Спросил уже у многих сведущих в си++ и все они согласны с правомерностью кода, говорят, что доступ должен быть (правда они никогда не пользовались g++). Так что я понять не могу в чем фигня. Может просто у g++ так не принято и нужно его специальными ключами уговаривать?

mirt1971

Ты чего тут гонишь? Передаешь переменную Xuy1 по значению и хочешь чтобы она была измененной вне тела функции? Тогда надо передавать как xuy& Xuy1.

maggi14

у тебя даже откомпилиться не должно. Ты звезду не туда засунул

mirt1971

Ну это модельный пример, как я понял

pavlova

Да, теперь работает .
Спасибо.

pavlova

Конечно модельный. Просто для проверки одной теории.

pavlova

Не, у меня все компилируется

maggi14

пардон, меня склинило. Как-то непривычно возвращать int*

pavlova

В дебагере хотел за адресами последить, вот и поизвращался

laki

Проблема здесь
pizda(Xyu1,3);
Xyu1 - его надо передовать либо по ссылке либо указателем, создается копия объекта, и последующее обращение не отвечает за то что память будет общая, это имхо весьма логично. хотя мб я сейчас пьяный , но после ошибки, которую выкидывает VC .NET именно это.Код комплится но глючит.

mirt1971

А ты тред прочел?

laki

Да вообще какая-то хуйня написана. Возвращает все правильно. Читай Трупа. Все работает нормально первое возвращается адрес второе значение по этому адресу.
Я правда так и не понял на хую такие извращения

laki

Да прочел. Запусти под дот нет и посмотри что это есть.

pavlova

...создается копия объекта...

Так это чего ж, я создаю нехилого размера объект, а он у меня еще и размножаться будет?!
Б#я, не знал! Ботать нуна...

pavlova

Я правда так и не понял на хую такие извращения

Ответ:
Если программер извращенец, то он программер. Обратное не верно.

laki

Ага по этому поводу лучше гони его указателем.

Я помню один раз так хорошо наебалcя писал МАШГШРАФ юзал std::vector и в одном месте приравнял и долго вкуривал почему на целках 20 кадров, а на пнях 40 когда передал по указателю все стало заебись.

laki

22 это
pizda(Xyu1,3);

pavlova

Я не под виндой сижу и мой gdb так не ругался (он вообще не ругался !)

laki

А я не говорю что это не компилится.
Это компилится, но это не правильно. up ^

laki

И в релизе это катит, а дебаг ругается

mirt1971

Честно говоря все это очень странно. Я не понимаю что там undefined. Бред какой-то. Вообще это абсолютно нормальная программа. Просто она не работает как задумано. И почему при отладке она у тебя это показывает? Идиотизм.

laki

Я не буду ударятся в спор, плюсы я люблю, и моя точка зрения это не праильно(в плане извращено) и требуемого результата не добится, я подправил код и получил, то что хотел .
Читай Хелпу (c) Pablito

mirt1971

Если бы ты прочел тред то заметил бы что я посоветовал то же самое до тебя. В первом же посту. Так что я знаю в чем была проблема. Мне непонятно почему в дебуге появляется это сообщение об undefined.
Читай внимательно тред (с) Я

laki

извини ладно. просто я как то я привык что в программинге да и во всем форуме более 70 процентов просто не по теме
Поэтому их не читаю, а читаю конкретную проблему

Dasar

> Мне непонятно почему в дебуге появляется это сообщение об undefined
Потому что сейчас, при данной ошибке поле Xuy1.xuy_i неинициализируется, но при этом из него берется значение.

mirt1971

А почему оно не инициализируется? Должен же по любому выполнитсья конструктор по умолчанию, который и проинициализирует все поля?

Dasar

в C++ конструктор по умолчанию ничего сам не инициализирует

rosali

в C++ конструктор по умолчанию ничего сам не инициализирует

В С++ конструктор по умолчанию вообще-то вызывает конструкторы полей, и они чего там им нужно инициализируют. Просто конструктор int-а (если так можно выразится) действительно этого int-а не инициализирует...
Оставить комментарий
Имя или ник:
Комментарий: