fatal error C1004: непредвиденное обнаружение конца файла что делать?!

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Круг
Сообщения: 23
Зарегистрирован: 05 мар 2010, 11:33

сделала... ошибка C1004: непредвиденное обнаружение конца файла все равно осталась.. я щас уже с ума сойду..

да программирование это вообще не по моей специальности.. я не понимаю зачем нам поставили его в учебный план вообще?! ((
Круг
Сообщения: 23
Зарегистрирован: 05 мар 2010, 11:33

error LNK2005: "float __cdecl func1(float,float)" (?func1@@YAMMM@Z) уже определен в func.obj
error LNK2005: "float __cdecl func2(float,float)" (?func2@@YAMMM@Z) уже определен в func2.obj
error LNK1169: обнаружен многократно определенный символ - один или более

что это за страшные вещи?!
IceFlame
Сообщения: 62
Зарегистрирован: 29 ноя 2009, 03:54

func2.cpp исправить следующим образом

Код: Выделить всё

#include "stdafx.h"
#include <math.h>
#include "func.cpp"
float func2 (float c,float d)
#ifdef TYPE
{return (float) func1((int) c,(int) d);}
#else 
{return func1 (c,d);}
#endif
Ошибка вываливается потому, что у вас два раза включен один и тот же файл.
Поэтому в главный файл надо включить ТОЛЬКО func2.cpp:

Код: Выделить всё

#include "func2.cpp"
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

файл func.h

Код: Выделить всё

#ifdef TYPE
    int func1 (int a, int b);
#else 
 float func1 (float a, float b);
#endif
файл func.cpp

Код: Выделить всё

#include "func.h"
#ifdef TYPE
    int func1 (int a, int b){ return a*a + b*b; }
#else 
 float func1 (float a, float b) {return a*a + b*b;}
#endif
файл func2.h

Код: Выделить всё

float func2 (float c,float d);
файл func2.cpp

Код: Выделить всё

#include "func2.h"
#include "func.h"
float func2 (float c,float d)
#ifdef TYPE
{return (float) func1,(int) c,(int) d;}
#else 
{return (float)func1 (c,d);}
#endif
файл main.cpp

Код: Выделить всё

#include <iostream.h>
#include "func2.h"
#include "func.h"
void main()
{
 float a,b;
    cout<<"Введите значения a и b";
    cin>>a>>b;
    func1(a,b);
    func2(a,b);
}
Круг
Сообщения: 23
Зарегистрирован: 05 мар 2010, 11:33

отлично ошибок нет, но теперь нет возврата а*а+b*b! ((

не происходит вызов функции насколько я понимаю ((
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

По какому принципу решил, что возврата нету? Куда должен быть возврат? На экран? А на экран ты ничего и не выписывала. Ты только функцию вызвала.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Круг писал(а):отлично ошибок нет, но теперь нет возврата а*а+b*b! ((

не происходит вызов функции насколько я понимаю ((
Вызов функции происходит и она возвращает значение, в данном случае в "никуда". Нет вывода результата её работы.
так можно увидеть рехультат func1:

Код: Выделить всё

cout<<func1(a,b);
Круг
Сообщения: 23
Зарегистрирован: 05 мар 2010, 11:33

огромное спасибо ))) заработало )))
Круг
Сообщения: 23
Зарегистрирован: 05 мар 2010, 11:33

что значит составить программу, демонстрирующую все этапы условной компиляции?!

кто нить может объяснить и/или продемонстрировать как это?!
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Подозреваю, что именно этим ты и занималась раньше, разбираясь описанной ранее программой. Условная компиляция как реализована в языке С++ следующими директивами препроцессора: #if, #ifdef, #ifndef, #else, #endif.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить