Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.93
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
#1

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

04.09.2008, 15:54. Просмотров 3346. Ответов 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)'
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2008, 15:54     Почему не может быть такой функции?
Посмотрите здесь:

Почему конструктор в отличаи от деструктора не может быть виртуальным? - C++
Вопрос озвучен :). Желательно, с разжёваным ответом. Спасибо

В чем может быть ошибка? (передача аргументов функции) - C++
Есть двумерный массив, симулирующий игровое поле (0 означают пустоту, 8 игрок) Есть некая функция, которую я хочу использовать просто для...

Как такое может быть? (вызов функции-члена без объекта) - C++
собственно вопрос озвучен. #include &lt;iostream&gt; using namespace std; class Test { public: void print() {

Почему тип входящего параметра функции может отличаться от типа возвращаемого значения? - C++
Зачем здесь указываеться другой тип данных: double &amp;change_it(int i); Весь код: using namespace std; double...

Может ли быть такое? - C++
поставил счетчик для сравнений в пирамидальной сортировке массива выдает 34732 сравнения. Добавлено через 1 час 3 минуты up!

Почему выдает такой результат? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class X { int a; long b; public: ...

Как такое может быть? - C++
Пишу программку... Начало функции мейн. Не прошло еще ничего кроме файла: int k=1; int l=1; На что компилятор мне выдает, что...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
04.09.2008, 20:12     Почему не может быть такой функции? #21
Если объект локальный,при выходе из функции запускается деструктор,в случае с потоками я не знаю,что конкретно делает деструктор,но,никто не гарантирует,что работа с его копией будет возможна. Делай как Vourhey говорит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2008, 20:39     Почему не может быть такой функции?
Еще ссылки по теме:

В чём может быть ошибка? - C++
Не пойму в чём ошибка в программе: #include &lt;iostream&gt; using namespace std; int main( ) // Program that...

Память не может быть прочитана! - C++
Проблема возникает при копировании одного массива в другой. Я вроди просмотрел и размерности вроди совпадают, но может быть я что то...

В чём может быть ошибка? - C++
Пишет, что нету точки с запятой. Где??? #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; { class Program ...

Память не может быть прочитала - C++
Здравствуйте, вот есть код: struct Dyn{ Syt select; Dyn* next; }; ............

В чём может быть ошибка? - C++
Описать функцию Power4(x,a,ξ) вещественного типа (параметры х, а, ξ - вещественные, |х|&gt;1; a,ξ &gt; 0), находящую приближенное значение...


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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.09.2008, 20:39     Почему не может быть такой функции? #22
О, я еще поспешу развеять твои сомнения по поводу ползености такого кода, как у тебя, и по поводу того, что ты говоришь "выношу значения вне функции". Скомпилируй это:
Код
using namespace std;
class a
{
public:
	int j;
	a(int u)
	{
		j = u;
	}
	a(const a &)
	{
		j = 666;
	}
};

a open_file_error()
{
	a i(10);
	cout<<i.j<<endl;
	return i;
}

void main()
{
	a i = open_file_error();
	cout<<i.j<<endl;
	cin.get();
}
где же та десятка, что была внутри? Куда делась? Что, теперь виднее стала едеологическая неправильность такого подхода? XuTPbIu_MuHTAu прав. Ты не можешь быть уверен, что тебе вернулось то, что было.
Делай через указатели. Тем более, в твоем случае конструктора копирования просто нет. Поэтому и ошибка.
Yandex
Объявления
04.09.2008, 20:39     Почему не может быть такой функции?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru