С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65

Почему не может быть такой функции?

04.09.2008, 15:54. Показов 4830. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ofstream input_file(str1) ; такой строкой кода я открываю файл.

ofstream - тип обекта
input_file - обект типа ofstream

а тепрь я хочу открывать файл в другом месте программы использую функцию, а в место вызова возвращать объект типа ofstream

так почему же не компилируется моя функция?
C++
1
2
3
4
5
6
7
8
9
10
ofstream open_file_eror(CString str1)
{
    ofstream input_file(str1) ;
    if(input_file==NULL) cout<< "~~ERROR~~ input file "<< str1<<"\n";
    {
        cout<< "~~ERROR~~ input file "<< str1<<"\n";
 
    }
    return input_file;
}
ошибки -
c:\documents and settings\я\мои документы\visual studio projects\kooltest\kooltest.cpp(21): error C2556: 'std::ofstream open_file_eror(ATL::CString)' : overloaded function differs only by return type from 'void open_file_eror(ATL::CString)'
c:\documents and settings\я\мои документы\visual studio projects\kooltest\kooltest.cpp(21): error C2371: 'open_file_eror' : redefinition; different basic types
c:\documents and settings\я\мои документы\visual studio projects\kooltest\kooltest.cpp(31): error C2556: 'std::ofstream open_file_eror(ATL::CString)' : overloaded function differs only by return type from 'void open_file_eror(ATL::CString)'
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.09.2008, 15:54
Ответы с готовыми решениями:

Почему у функции main() тип int? Почему не может быть какой-то другой, например, char?
Схема, касательно возвращаемого значения понятна. Не понятно почему именно целочисленное. Хелп)

Подскажите как может быть устроен такой датчик...
http://www.ebay.som/itm/POLE-TANK-SENDER-Fuel-wotir-Level-Liquid-Sensor-Gauge-Meter-250mm-length-/360696100995?pt=Motors_Car_Truck_Parts_Acc...

Сколько вариантов может быть такой посадки деревьев?
Садоводу надо посадить 7 груш, 8 яблонь и 4 вишни в двух садах. Сколько вариантов может быть такой посадки, если хотя бы по одному дереву...

21
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 17:31
Компилер тебе, похоже, намекает, что у тебя redefinition одной и той же функции. И отличаются они только возвращаемыми значениями. Почмотри свой код, может, она еще где объявлена с void.
0
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
04.09.2008, 17:39  [ТС]
вобще не то я здесь написал совершенно другие куски кода
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 18:17
Теперь ты че-то пытаешься сделать со своим стримом (типа присваивания, или создания из другого стрима), для чего нужно вызвать конструктор копирования, а он не объявлен. Че-то в этим роде. Но связи с этим куском кода не вижу...
0
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
04.09.2008, 18:35  [ТС]
извиняюсь сейчас у меня такой код и такие ошибки:
C++
1
2
3
4
5
6
7
8
9
10
11
ofstram open_file_eror(CString str1);//эта функция открывает файл и обрабатывает ошибки связанные с открытием
ofstream open_file_error(CString str1)
{
    ofstream input_file(str1) ;
    if(input_file==NULL) cout<< "~~ERROR~~ input file "<< str1<<"\n";
    {
        cout<< "~~ERROR~~ input file "<< str1<<"\n";
 
    }
    return input_file;
}
c:\documents and settings\я\мои документы\visual studio projects\kooltest\kooltest.cpp(28): error C2146: syntax error : missing ';' before identifier 'open_file_eror'
c:\documents and settings\я\мои документы\visual studio projects\kooltest\kooltest.cpp(28): error C2501: 'ofstram' : missing storage-class or type specifiers
c:\documents and settings\я\мои документы\visual studio projects\kooltest\kooltest.cpp(37): error C2558: class 'std::basic_ofstream<_Elem,_Traits>' : no copy constructor available or copy constructor is declared 'explicit'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 18:41
Видимо, компилер не знает, что такое "ofstram"... Может, ты хотел ему сказать "ofstream"?
1
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
04.09.2008, 18:45  [ТС]
Теперь ты че-то пытаешься сделать со своим стримом (типа присваивания, или создания из другого стрима), для чего нужно вызвать конструктор копирования, а он не объявлен. Че-то в этим роде. Но связи с этим куском кода не вижу...
извини я по ошибке вообще не тот код пихнул

Добавлено через 3 минуты 36 секунд
ага не знает))))) вот такой из меня прграммист.
текущее состояние -
C++
1
2
3
4
5
6
7
8
9
10
11
ofstream open_file_eror(CString str11);//эта функция открывает файл и обрабатывает ошибки связанные с открытием
ofstream open_file_error(CString str11)
{
    ofstream input_file(str11) ;
    if(input_file==NULL) cout<< "~~ERROR~~ input file "<< str11<<"\n";
    {
        cout<< "~~ERROR~~ input file "<< str11<<"\n";
 
    }
    return input_file;
}
еррор -
c:\documents and settings\я\мои документы\visual studio projects\kooltest\kooltest.cpp(37): error C2558: class 'std::basic_ofstream<_Elem,_Traits>' : no copy constructor available or copy constructor is declared 'explicit'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 18:56
Я, конечно, фиг знает. Но, по-моему, не нормально пытаться возвращать объект из функции. Он, видимо, на return хотел бы выполнить конструктор копирования, но его нет.
Попробуй с указателем сделать:
Code
1
2
3
4
5
6
7
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
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
04.09.2008, 19:29  [ТС]
не не всегда, почему это всегда???


"Но, по-моему, не нормально пытаться возвращать объект из функции. Он, видимо, на return хотел бы выполнить конструктор копирования, но его нет."
почему же не нормально?

ведь int, double, и особенно CString тоже обекты.

например такая функция может быть -
C++
1
2
3
4
5
CString open_file_error(CString str11)
{
   
    return str11;
}
я возвращаю объект из функции
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 19:32
Блин, это в принципе, идеологически не нормально. Ты не думаешь, что объект ты создаешь внутри функции? По сути, ты пересоздаешь еще объект для внешнего мира. У тебя объект-то локальный. Подумай-ка, а...
0
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
04.09.2008, 19:32  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
ofstream *open_file_error(CString str11);//эта функция открывает файл и обрабатывает ошибки связанные с открытием
ofstream *open_file_error(CString str11)
{
    ofstream *input_file(str11) ;
    if(input_file==NULL) cout<< "~~ERROR~~ input file "<< str11<<"\n";
    {
        cout<< "~~ERROR~~ input file "<< str11<<"\n";
 
    }
    return input_file;
}
еррорс -
c:\documents and settings\я\мои документы\visual studio projects\kooltest\kooltest.cpp(31): error C2440: 'initializing' : cannot convert from 'ATL::CString' to 'std::ofstream *'
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 19:40
код с использованием указателей работает в несколько раз быстрее, так как, не вызывает никакого копирования и прочих операций над объектами.

Добавлено через 4 минуты 13 секунд
Блин, кто ж так объекты создает?!
Code
1
    ofstream *input_file(str11) ;
Ты прикалываешься? Память Александр Сергеевич будет выделять?
0
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
04.09.2008, 19:42  [ТС]
Блин, это в принципе, идеологически не нормально. Ты не думаешь, что объект ты создаешь внутри функции? По сути, ты пересоздаешь еще объект для внешнего мира. У тебя объект-то локальный. Подумай-ка, а...
Не вижу противоречия!!!!!!!
Всё что внутри функции локального характера.
для этого и нужен ретёрн - он выводит информацию во внешний мир.
C++
1
2
3
4
5
6
7
CString filename(CString mask_name1,CString filename1,int i1)
{
    CString slash("/"), txt(".txt"),str;
    str.Format("%s%s%s%d%s",mask_name1,slash, filename1,i1,txt);
    
    return str;
}
переменная str локальго характера но я же могуеё во вне получить!!!!! так:
C++
1
str=filename(mask_name,"_demand");
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 19:48
Я прям даже и не знаю. Влом объяснять то, что вы должны сами читать.

Ты пойми! Объект у тебя локальный! Как ты его из функции выведешь?! Никак. ТОлько конструктор копирования будет копировать все части твоего объекта во внешнюю переменную. А если его нет? Или он закрытый для нас. То некому. Вообще, нафига таким кривым идти? Указатели все делают гладко...

Смотри, блин, сюда внимательно! Пиши этот код:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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();
}
Видишь HI в консоли?! Это тебе конструктор копирования привет передает! Посмотри и подумай теперь. А если не дойдет, то иди и бери книжку по классам. Если нет книги, дизассемблер и дебагер в руки. Я тут лекции расписывать не собираюсь, объясняя очевидные вещи...
1
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
04.09.2008, 19:50  [ТС]
Цитата Сообщение от Vourhey Посмотреть сообщение
код с использованием указателей работает в несколько раз быстрее, так как, не вызывает никакого копирования и прочих операций над объектами.

Добавлено через 4 минуты 13 секунд
Блин, кто ж так объекты создает?!
Code
1
     ;
Ты прикалываешься? Память Александр Сергеевич будет выделять?
я вообще не понимаю ведь ofstream толи это объект толи это поток.



Code
1
2
input_file= (ofstream*)calloc(1, sizeof(ofstream));
input_file(str11);
tak?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 19:55
Блин, голову включи! Как он ее выводит?!?!?! Если это разные переменные?! Он копирует! Он копирует все из внутренней во внешнюю через конструктор копирования. Тьфу, блин. Читай книжки.

Код с указателями работает. Доказывать очевидное надоело... Что-нибудь еще?

Добавлено через 49 секунд
Боже, создай через new, пожалуйста...хоть конструктор нормально вызовешь...

Добавлено через 1 минуту 48 секунд
Блин, а вот теперь измени в предыдущем моем коде на:
Code
1
2
3
4
5
6
7
    }
private:
    a(const a &)
    {
        cout<<"HI!"<<endl;
    }
};
Ошибка будет! Вот теперь думай, почему... Уф. Я устал
0
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
04.09.2008, 19:56  [ТС]
Цитата Сообщение от Vourhey Посмотреть сообщение
Блин, башку включи! Как он ее выводит?!?!?! Если это разные переменные?! Он копирует! Он копирует все из внутренней во внешнюю через конструктор копирования. Тьфу, блин. Читай книжки.

Код с указателями работает. Доказывать очевидное надоело... Что-нибудь еще?

Добавлено через 49 секунд
может ты приведёшь пример рабочий этого дела?
тогда все споры отпадут.
я и сам понимаю что мне книжки нужно чиатать!
я их и читаю.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 19:58
Ты издеваешься надо мной? Я ж те написал. На предыдущей странице.
0
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
04.09.2008, 20:10  [ТС]
по правде говоря нет.

ладно спасибо за помощь когда разберусь в твоих примерах напишу)
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2008, 20:11
Разберись уж
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.09.2008, 20:11
Помогаю со студенческими работами здесь

Что за баг может быть такой в VLC Player 2.1.2?
Здравствуйте! Много говорить не буду - только по сути. Создаю окно через WinAPI. Его клиентскую область использую для вывода видео через...

Нужен такой калькулятор, самый простой код, который только может быть

Почему такой бредовый вывод типов и как с этим быть?
Если так let add (a:float) (b:float) (c:float) = b * b - a * c;; то всё нормально val add : a:float -&gt; b:float -&gt;...

Почему может не быть индекса?
Есть серверная база. Есть пользователь с правами Эдитора. Для базы создан индекс, который периодически обновляется. Так вот что...

Почему движок wordpress может быть плох
Авто портал - чересчур громко сказано, конечно. Но все равно, если я смогу реализовать такой сайт посредством wordpress, то какие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru