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

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

04.09.2008, 15:54. Показов 4875. Ответов 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
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru