0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 28
1

Заголовочный файл и тип enum

08.02.2010, 16:36. Показов 3123. Ответов 5
Метки нет (Все метки)

Задание состоит в том, что надо программу разбить на три части:
заголовочный файл Factor.h, у меня он такой получился:
C++
1
2
3
4
5
6
7
8
9
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
enum ERR_CODE { SUCSESS, FAILURE };
 
ERR_CODE Factor(int,int&,int&);
Файл с функцией Factor.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
#include "factor.h"
 
ERR_CODE Factor(int x, int&pSquared, int&pCube)
{
    if(x>20)
        return FAILURE;
    else
    {
        pSquared=x*x;
        pCube=x*x*x;
        return SUCSESS;
    }
}
И файл с основной программой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include "Factor.cpp"
#include "factor.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    int x,squared,cube;
    ERR_CODE result;
    cout<<"Vvedite chislo(0-20):";
    cin>>x;
    result = Factor(x,squared,cube);
    if(result==SUCSESS)
    {
        cout<<"squared:"<<squared<<endl;
        cout<<"Cube"<<cube<<endl;
    }
    else
        cout<<"Error!";
 
    return 0;
}
программа должна считать квадрат и куб числа, а функция возвращать код ошибки и с помощью ссылок так же возвращать вычисленные значения куба и квадрата.
Вопросы:
1.Почему постоянно в каждой части опять надо вводить
C++
1
#include "stdafx.h"
? Ведь по-моему хватает написать это в заголовочном файле Factor.h.
2.И почему постоянно выдает об ошибке: error C2011: ERR_CODE: переопределение типа "enum" ?
что я сделал не правильно?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2010, 16:36
Ответы с готовыми решениями:

Заголовочный файл подключен, но не виден тип
Работаю в QT. Выдает ошибку does not name a type, как будто нет такого типа. У меня 2 класса и в...

Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении?
Пытаюсь сделать функцию с передачей нескольких параметров,используя битовые операции. В качестве...

Добавить свой тип (Enum) в тип переменной My.Settings
Доброй ночи! В принципе название темы говорит само за себя. Нужен параметр приложения с моим типом...

Тип Enum
Вот табличка как тут правильно использовать, доклад будет опубликован enum тоесть нужно да либо...

5
1664 / 1133 / 80
Регистрация: 21.08.2008
Сообщений: 4,725
Записей в блоге: 1
08.02.2010, 16:39 2
#include "stdafx.h" нужно для предкомпилированных заголовков. На больших проектах значительно уменьшает время сборки.
Можно в опциях отключить это.
0
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 28
08.02.2010, 16:59  [ТС] 3
Понятно... спасибо!
Но почему ругается на переопределение типа, ведь не вставишь в другое место?
Конкретно эта ошибка находится в 7-й строке кода Factor.h
0
555 / 509 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
08.02.2010, 17:03 4
Цитата Сообщение от Grey_Crow Посмотреть сообщение
Вопросы:
1.Почему постоянно в каждой части опять надо вводить
C++
1
#include "stdafx.h"
? Ведь по-моему хватает написать это в заголовочном файле Factor.h.
2.И почему постоянно выдает об ошибке: error C2011: ERR_CODE: переопределение типа "enum" ?
что я сделал не правильно?
1. тогда нужно будет в каджом срр включать Factor.h. даже там, где он не нужен.
2. потому что включаешь несколько раз этот свой Factor.h, а он содержит это определение. перепиши Factor.h так, чтобы все что в нем есть включалось лишь один раз при компиляции, независимо от числа срр файлов, где Factor.h включен.

в зависимости от версии студии твоей:

или

C++
1
#pragma once
или

C++
1
2
3
4
#ifndef MY_SUPER_FACTOR_BLABLABLA_GUID
#define MY_SUPER_FACTOR_BLABLABLA_GUID
.....
#endif //MY_SUPER_FACTOR_BLABLABLA_GUID
2
Фрилансер
3701 / 2073 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
08.02.2010, 17:09 5
Кто Вас учил делать так?
C++
1
#include "Factor.cpp"
Файлы .cpp не включаются в другие. Просто включите все свои .cpp в один проект.

А Ваша ошибка возникает из-за того, что заголовок включается несколько раз. Нужно или обрамлять "скобками":
C++
1
2
3
4
5
6
#ifndef FactorH
#define FactorH
...
// Тут все остальное содержимое
...
#endif
Или же VC допускает директиву
C++
1
#pragma once
Upd. Слишком долго писал.. Опередили..
2
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 28
08.02.2010, 18:46  [ТС] 6
сделал, как вы сказали, но компилятор начал выдавать ошибки:
Ошибка 1 error LNK2005: "enum ERR_CODE __cdecl Factor(int,int &,int &)" (?Factor@@YA?AW4ERR_CODE@@HAAH0@Z) уже определен в 11.obj Factor.obj


Ошибка 2 fatal error LNK1169: обнаружен многократно определенный символ - один или более C:\BegCSharp\c++\24\11\11\Debug\11.exe

Переписал даже, чтобы Factor.cpp не использовался, все равно такая же ошибка..(
не могу понять почему, ведь Factor.h используется только один раз....
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2010, 18:46
Помогаю со студенческими работами здесь

Тип enum и нумерация
Всем здрасьте ! У меня есть тип enum, который описывает что-то: enum NUM { X1, X2, X3, ...} ...

Тип данных ENUM
вообщем, имею в таблице поле с типом данных ENUM (переключаемое которое). Значения - 'y','n' по...

Тип данных enum
Здравствуйте. Как работать с этим типом поля? Можно ли вытаскивать данные о возможных вариантах....

Вынос шаблонной функции в заголовочный файл и файл с реализацией
Имеется шаблонная функция, которую я помещаю в файл реализации templ.cpp: #include...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru