1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
||||||
1 | ||||||
Почему не может быть такой функции?04.09.2008, 15:54. Показов 4423. Ответов 21
Метки нет (Все метки)
ofstream input_file(str1) ; такой строкой кода я открываю файл.
ofstream - тип обекта input_file - обект типа ofstream а тепрь я хочу открывать файл в другом месте программы использую функцию, а в место вызова возвращать объект типа ofstream так почему же не компилируется моя функция?
0
|
04.09.2008, 15:54 | |
Ответы с готовыми решениями:
21
Почему у функции main() тип int? Почему не может быть какой-то другой, например, char? Подскажите как может быть устроен такой датчик... Сколько вариантов может быть такой посадки деревьев? Что за баг может быть такой в VLC Player 2.1.2? |
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
|
04.09.2008, 17:39 [ТС] | 3 |
вобще не то я здесь написал совершенно другие куски кода
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
04.09.2008, 18:17 | 4 |
Теперь ты че-то пытаешься сделать со своим стримом (типа присваивания, или создания из другого стрима), для чего нужно вызвать конструктор копирования, а он не объявлен. Че-то в этим роде. Но связи с этим куском кода не вижу...
0
|
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
||||||
04.09.2008, 18:35 [ТС] | 5 | |||||
извиняюсь сейчас у меня такой код и такие ошибки:
0
|
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
||||||
04.09.2008, 18:45 [ТС] | 7 | |||||
Добавлено через 3 минуты 36 секунд ага не знает))))) вот такой из меня прграммист. текущее состояние -
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
04.09.2008, 18:56 | 8 |
Я, конечно, фиг знает. Но, по-моему, не нормально пытаться возвращать объект из функции. Он, видимо, на return хотел бы выполнить конструктор копирования, но его нет.
Попробуй с указателем сделать: Код
ofstream *open_file_eror(CString str11); ofstream *open_file_error(CString str11) { ofstream *input_file = new ofstream(str11) ; if(input_file==NULL) cout<< "~~ERROR~~ input file "<< str11<<"\n"; return input_file; } Добавлено через 5 минут 34 секунды Я убрал строки, так как, твой вышеприведенный код должен всегда выводить ERROR. У нас же блок уже вне условия...
0
|
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
||||||
04.09.2008, 19:29 [ТС] | 9 | |||||
не не всегда, почему это всегда???
"Но, по-моему, не нормально пытаться возвращать объект из функции. Он, видимо, на return хотел бы выполнить конструктор копирования, но его нет." почему же не нормально? ведь int, double, и особенно CString тоже обекты. например такая функция может быть -
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
04.09.2008, 19:32 | 10 |
Блин, это в принципе, идеологически не нормально. Ты не думаешь, что объект ты создаешь внутри функции? По сути, ты пересоздаешь еще объект для внешнего мира. У тебя объект-то локальный. Подумай-ка, а...
0
|
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
||||||
04.09.2008, 19:32 [ТС] | 11 | |||||
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
04.09.2008, 19:40 | 12 |
код с использованием указателей работает в несколько раз быстрее, так как, не вызывает никакого копирования и прочих операций над объектами.
Добавлено через 4 минуты 13 секунд Блин, кто ж так объекты создает?! Код
ofstream *input_file(str11) ;
0
|
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
|||||||||||
04.09.2008, 19:42 [ТС] | 13 | ||||||||||
Всё что внутри функции локального характера. для этого и нужен ретёрн - он выводит информацию во внешний мир.
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
04.09.2008, 19:48 | 14 |
Я прям даже и не знаю. Влом объяснять то, что вы должны сами читать.
Ты пойми! Объект у тебя локальный! Как ты его из функции выведешь?! Никак. ТОлько конструктор копирования будет копировать все части твоего объекта во внешнюю переменную. А если его нет? Или он закрытый для нас. То некому. Вообще, нафига таким кривым идти? Указатели все делают гладко... Смотри, блин, сюда внимательно! Пиши этот код: Код
class a { public: a() { ; } a(const a &) { cout<<"HI!"<<endl; } }; a open_file_error() { a i; cout<<&i<<endl; return i; } void main() { a i = open_file_error(); cout<<&i<<endl; cin.get(); }
1
|
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
|
04.09.2008, 19:50 [ТС] | 15 |
я вообще не понимаю ведь ofstream толи это объект толи это поток.
Код
input_file= (ofstream*)calloc(1, sizeof(ofstream)); input_file(str11);
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
04.09.2008, 19:55 | 16 |
Блин, голову включи! Как он ее выводит?!?!?! Если это разные переменные?! Он копирует! Он копирует все из внутренней во внешнюю через конструктор копирования. Тьфу, блин. Читай книжки.
Код с указателями работает. Доказывать очевидное надоело... Что-нибудь еще? Добавлено через 49 секунд Боже, создай через new, пожалуйста...хоть конструктор нормально вызовешь... Добавлено через 1 минуту 48 секунд Блин, а вот теперь измени в предыдущем моем коде на: Код
} private: a(const a &) { cout<<"HI!"<<endl; } };
0
|
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
|
04.09.2008, 19:56 [ТС] | 17 |
может ты приведёшь пример рабочий этого дела?
тогда все споры отпадут. я и сам понимаю что мне книжки нужно чиатать! я их и читаю.
0
|
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
|
|
04.09.2008, 20:10 [ТС] | 19 |
по правде говоря нет.
ладно спасибо за помощь когда разберусь в твоих примерах напишу)
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
04.09.2008, 20:11 | 20 |
Разберись уж
0
|
04.09.2008, 20:11 | |
04.09.2008, 20:11 | |
Помогаю со студенческими работами здесь
20
Нужен такой калькулятор, самый простой код, который только может быть Почему такой бредовый вывод типов и как с этим быть? Почему может не быть индекса? Почему движок wordpress может быть плох Может ли быть метод virtual static? И почему? Память не может быть Read, Почему так ??? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |