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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Grey_Crow
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 28
08.02.2010, 16:36     Заголовочный файл и тип enum #1
Задание состоит в том, что надо программу разбить на три части:
заголовочный файл 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" ?
что я сделал не правильно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
08.02.2010, 16:39     Заголовочный файл и тип enum #2
#include "stdafx.h" нужно для предкомпилированных заголовков. На больших проектах значительно уменьшает время сборки.
Можно в опциях отключить это.
Grey_Crow
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 28
08.02.2010, 16:59  [ТС]     Заголовочный файл и тип enum #3
Понятно... спасибо!
Но почему ругается на переопределение типа, ведь не вставишь в другое место?
Конкретно эта ошибка находится в 7-й строке кода Factor.h
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
08.02.2010, 17:03     Заголовочный файл и тип enum #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
Black Fregat
 Аватар для Black Fregat
1353 / 983 / 215
Регистрация: 31.05.2009
Сообщений: 4,093
08.02.2010, 17:09     Заголовочный файл и тип enum #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. Слишком долго писал.. Опередили..
Grey_Crow
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 28
08.02.2010, 18:46  [ТС]     Заголовочный файл и тип enum #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 используется только один раз....
Yandex
Объявления
08.02.2010, 18:46     Заголовочный файл и тип enum
Ответ Создать тему
Опции темы

Текущее время: 05:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru