Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Может ли быть метод virtual static? И почему? - C++
Очень нужно объяснение! В интернете ничего конкретно про это не написано.

Почему конструктор в отличаи от деструктора не может быть виртуальным? - 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!

21
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.09.2008, 19:55 #16
Блин, голову включи! Как он ее выводит?!?!?! Если это разные переменные?! Он копирует! Он копирует все из внутренней во внешнюю через конструктор копирования. Тьфу, блин. Читай книжки.

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

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

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

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

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

ладно спасибо за помощь когда разберусь в твоих примерах напишу)
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.09.2008, 20:11 #20
Разберись уж
0
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
04.09.2008, 20:12 #21
Если объект локальный,при выходе из функции запускается деструктор,в случае с потоками я не знаю,что конкретно делает деструктор,но,никто не гарантирует,что работа с его копией будет возможна. Делай как Vourhey говорит.
0
Vourhey
Почетный модератор
6486 / 2260 / 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 прав. Ты не можешь быть уверен, что тебе вернулось то, что было.
Делай через указатели. Тем более, в твоем случае конструктора копирования просто нет. Поэтому и ошибка.
0
04.09.2008, 20:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2008, 20:39
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

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