Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
1

подключение hpp и срр,что то не правильно сделал,классы

07.03.2010, 15:04. Просмотров 2581. Ответов 23
Метки нет (Все метки)

сначала создаю hpp файл,в нем создаю интерфейс класса,потом срр файл создаю,в нем класс начинаю определять,а в меин.срр создаю объект..вобщем вот коды
employee.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <windows.h>
#include <iostream> 
 
class employee{
 
    int age,years,salary;
    public:
 
        employee(int cage,int cyears,int calary){
        age=cage;
        years=cyears;
        salary=calary;      
        }
        ~employee(){}
 
        int getage() const;
        int setage(int sage);
        int getyears() const;
        int setyears(int sage);
        int getsal() const;
        int setsal(int sage);
 
        
 
};
employee.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int employee::getage()const{
        return age;
        }
        int setage(int sage){
        return age=sage;
        }
    int employee::getyears()const{
        return years;
        }
        int employee::setyears(int syears){
        return years=syears;
        }
 
            int getsal()const{
        return salary;
        }
        int employee::setsal(int ssal){
        return salary=ssal;
                }
main();
C++
1
2
employee jon(20,1,1000);
cout<<"age "<<jon.getage()<<" salary "<<jon.getsal()<<" years "<<jon.getyears()<<endl;
ошибки
Error 1 error C2065: 'age' : undeclared identifier c:\Documents and Settings\AG\My Documents\Visual Studio 2008\Projects\proba\proba\employee.cpp 9 proba
Error 2 error C2270: 'getsal' : modifiers not allowed on nonmember functions c:\Documents and Settings\AG\My Documents\Visual Studio 2008\Projects\proba\proba\employee.cpp 18 proba
Error 3 error C2065: 'salary' : undeclared identifier c:\Documents and Settings\AG\My Documents\Visual Studio 2008\Projects\proba\proba\employee.cpp 19 proba
Error 20 error C2065: 'age' : undeclared identifier c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\employee.cpp 9 proba
Error 21 error C2270: 'getsal' : modifiers not allowed on nonmember functions c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\employee.cpp 18 proba
Error 22 error C2065: 'salary' : undeclared identifier c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\employee.cpp 19 proba
все эти ошибки жалуются на employee.cpp файл,мол не знает че это такое,хотя я подключил интерфейс

Добавлено через 2 минуты
поправил employee.cpp файл,там забыл перед функиями написать employee::....
вт написал,теперь хуже ошибки
Error 1 error LNK2005: "public: int __thiscall employee::setsal(int)" (?setsal@employee@@QAEHH@Z) already defined in code.obj employee.obj proba
Error 2 error LNK2005: "public: int __thiscall employee::getsal(void)const " (?getsal@employee@@QBEHXZ) already defined in code.obj employee.obj proba
Error 3 error LNK2005: "public: int __thiscall employee::setyears(int)" (?setyears@employee@@QAEHH@Z) already defined in code.obj employee.obj proba
Error 4 error LNK2005: "public: int __thiscall employee::getyears(void)const " (?getyears@employee@@QBEHXZ) already defined in code.obj employee.obj proba
Error 5 error LNK2005: "public: int __thiscall employee::setage(int)" (?setage@employee@@QAEHH@Z) already defined in code.obj employee.obj proba
Error 6 error LNK2005: "public: int __thiscall employee::getage(void)const " (?getage@employee@@QBEHXZ) already defined in code.obj employee.obj proba
Error 7 fatal error LNK1169: one or more multiply defined symbols found C:\Documents and Settings\AG\My Documents\Visual Studio 2008\Projects\proba\Release\proba.exe 1 proba
а че за ошибки,и где компилятор не говорит,при нажатии на ошибку
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2010, 15:04
Ответы с готовыми решениями:

Подключение в проекте .hpp и .cpp файлов
Добрый день! Среда разработки Code Blocks 13.12 Компилятор GNU GCC В...

Как сделать несколько функций в одном срр ?Написал программы, которые нужно поочередно запустить в одном срр
#include &lt;iostream&gt; void func(double&amp; x,double&amp; y) { double temp_min =...

срр файл в нутри срр
можна ли зделать так что бы срр файл выполнялса в нутри главно файла програмы...

Правильно ли я сделал?
#include &lt;iostream&gt; using namespace std; int main() { int a,b,c; ...

Правильно ли сделал
Нужно проверить правильно ли я сделал?? #include &lt;iostream.h&gt; #include...

23
SerЁga
32 / 32 / 16
Регистрация: 18.08.2009
Сообщений: 93
07.03.2010, 15:18 2
Линковщик не видит реализации ф-ций
int getyears() const;
int setyears(int sage);
int getsal() const;
int setsal(int sage);
в .cpp файле.
Добавь реализацию.
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
07.03.2010, 15:48  [ТС] 3
SerЁga, что за реализация и как добавить
0
Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
07.03.2010, 16:02 4
А у тебя в файле emloye.cpp где директива #include "emloye.hpp" ?
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
07.03.2010, 16:09  [ТС] 5
Amarted, там просто не скопировал...есть она там
0
SerЁga
32 / 32 / 16
Регистрация: 18.08.2009
Сообщений: 93
07.03.2010, 17:32 6
Добавь в .cpp файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int employee::getyears()const{
               return 0;
               }
int employee::setyears(int sage)
{
               return sage;
            }
 
int employee::getsal()const{
               return 0;
                }
 
int employee::setsal(int sage)
{
               return sage;
            }
Эти ф-ции ничего делать не будут, но ошибки должны уйти.
А потом в ф-циях напишишь то что надо.
0
Vorona
Peace 2 all shining faces
672 / 534 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
07.03.2010, 20:26 7
есть еще вариант: в .hpp написать после объявления заголовочных файлов
#ifndef __employee
#define __employee
и в самом конце файла - #endif
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
07.03.2010, 20:56  [ТС] 8
Цитата Сообщение от Vorona Посмотреть сообщение
#ifndef __employee
#define __employee
в книгах такое нету
Цитата Сообщение от SerЁga Посмотреть сообщение
Эти ф-ции ничего делать не будут, но ошибки должны уйти.
А потом в ф-циях напишишь то что надо.
почему?...эти функции возвращают числа
0
Vorona
Peace 2 all shining faces
672 / 534 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
07.03.2010, 22:44 9
Цитата Сообщение от МедведЪ Посмотреть сообщение
Сообщение от Vorona Посмотреть сообщение
#ifndef __employee
#define __employee
в книгах такое нету
в книгах много чего нету, но эти директивы должны быть и такой способ посоветовал преподователь, впринципе мне часто помогало.. и в конце #endif не забудь
можно еще указать полный путь нахождения .hpp файла только в таких <> скобках, а не ковычках или посмотреть настройки компилятора..
1
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
07.03.2010, 22:45  [ТС] 10
Цитата Сообщение от Vorona Посмотреть сообщение
в книгах много чего нету, но эти директивы должны быть и такой способ посоветовал преподователь, впринципе мне часто помогало.. и в конце #endif не забудь
можно еще указать полный путь нахождения .hpp файла только в таких <> скобках, а не ковычках или посмотреть настройки компилятора..
спасибо за инфу,но зы я по книге прохожу,все имет свое место
0
Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
07.03.2010, 22:57 11
Странно у меня всё работает, причем без всяких директив типа #define и тд... только вот не пойму зачем тебе #include <windows.h>? напиши полный код всех трёх файлов, включая меин. Если у тебя выходят такие ошибки то скорей всего какойто файл у тебя включается дважды.
0
Vorona
Peace 2 all shining faces
672 / 534 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
07.03.2010, 23:26 12
хм, скомпилировал твой код (с исправлениями employee:: ), все работает)

только main у меня в одном файле с инициализациями членов класса

вспомнил, а ты создал проект?
вот распределил все по трем файлам, не работало, а создал проект и подключил туда main.cpp employee.cpp, все работает
0
easybudda
Модератор
Эксперт CЭксперт С++
10089 / 6000 / 1503
Регистрация: 25.07.2009
Сообщений: 11,375
07.03.2010, 23:30 13
Цитата Сообщение от МедведЪ Посмотреть сообщение
в книгах такое нету
Любой стандартный заголовочный файл открой. Лежат где-нибудь, вроде c:\Program Files\Microsoft Visual Studio 8\VC\include.
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
07.03.2010, 23:36  [ТС] 14
Цитата Сообщение от easybudda Посмотреть сообщение
Любой стандартный заголовочный файл открой. Лежат где-нибудь, вроде c:\Program Files\Microsoft Visual Studio 8\VC\include.
зачем Оо
0
Delphin_KKC
UNIX-way
710 / 494 / 49
Регистрация: 15.01.2009
Сообщений: 1,721
08.03.2010, 00:07 15
Лучший ответ Сообщение было отмечено как решение

Решение

Вот в таком виде всё 100% работает:

employee.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
class employee
{
      int age,years,salary;
      public:
 
      employee(int cage,int cyears,int calary)
      {
         age=cage;
         years=cyears;
         salary=calary;          
      }   
      employee()//конструктора по умолчанию больше нет! Нужно написать свой
      {
         age=0;
         years=0;
         salary=0;          
      }
      ~employee(){}
 
      int getage();
      void setage(int sage);
      int getyears();
      void setyears(int sage);
      int getsal();
      void setsal(int sage);              
};
#endif //EMPLOYEE_H
employee.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "employee.h"
int employee::getage()
{
    return age;
}
 
void employee::setage(int sage)
{
    age=sage;
}
 
int employee::getyears()
{
    return years;
}
 
void employee::setyears(int syears)
{
    years=syears;
}
 
int employee::getsal()
{
    return salary;
}
 
void employee::setsal(int ssal)
{
    salary=ssal;
}
main();
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include "employee.h"
 
using namespace std;
 
int main(int argc, char *argv[])
{
    employee jon(20,1,1000);
    cout<<"age "<<jon.getage()<<" salary "<<jon.getsal()<<" years "<<jon.getyears()<<endl;
    system("PAUSE");
    return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от МедведЪ Посмотреть сообщение
зачем Оо
Чтоб случайно два раза не объявить одно и тоже.
А то иногда бывает так:

A.h
C++
1
#include "B.h"
main.cpp
C++
1
2
#include "A.h"
#include "B.h"
И если в B.h не будет тех ifndef'ов - то получится что-то типа
C++
1
2
int x;
int x;
На что компилятор возмутится.
Один раз я так попал. С тех пор ifndef постоянно юзаю.
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.03.2010, 00:12  [ТС] 16
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
На что компилятор возмутится.
Один раз я так попал. С тех пор ifndef постоянно юзаю.
не,ну я понимаю что это можно,но почему в книге об этом не говорится,а?
0
easybudda
Модератор
Эксперт CЭксперт С++
10089 / 6000 / 1503
Регистрация: 25.07.2009
Сообщений: 11,375
08.03.2010, 00:48 17
Цитата Сообщение от МедведЪ Посмотреть сообщение
не,ну я понимаю что это можно,но почему в книге об этом не говорится,а?
Читай правильные книги!
КиР 4.11.3. Условная компиляция.
1
Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
08.03.2010, 02:52 18
Цитата Сообщение от МедведЪ Посмотреть сообщение
не,ну я понимаю что это можно,но почему в книге об этом не говорится,а?
Потому что книги это книги, часто бывает и такое, что читаешь пол книги, в главах описываються разные вопросы, приводятся в качестве примера код, а потом, грубо говоря под конец книги ты узнаешь, что все эти коды не компилируются потому что в них не используеться, казалосьбы такая ерунда, как стандартное простраство имент( тобеж std) и тебе прямым текстом пишут что все это сделали специально чтоб, как бы не нагружать читателя, или что либо подобное... так что просто как ты хотел, следовать книге, это можно сказать как минимум не разумно, в том смысле что если об этом не сказано в этой книге, то об этом сказано в другой книге, и зацикливаться на той книге которую ты сейчас читаешь, очень даже не стоит! ( если что не понятно здесь то поищи это там...). Я сам прошел через это, может кто со мной и не согласится но такое уж моё мнение, прислушатся к нему или нет, это дело сугубо личное.
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.03.2010, 09:55  [ТС] 19
easybudda, ну спс...снова из за книг начинаю разочароваться в С++ и не любить....так же как и стало с явой...какая то тупая книга которая сразу начинается с классов...и тупая прога нетбинс,который не разрешает менять стд коды актив х-ов
0
Delphin_KKC
UNIX-way
710 / 494 / 49
Регистрация: 15.01.2009
Сообщений: 1,721
08.03.2010, 11:42 20
Цитата Сообщение от МедведЪ Посмотреть сообщение
...снова из за книг начинаю разочароваться в С++ и не любить...
Всегда говорил что самый лучший учитель - компилятор.
А книги - это что-то типа русского хелпа к нему
1
08.03.2010, 11:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2010, 11:42

Правильно ли я сделал пример
http://www.cyberforum.ru/cpp-beginners/thread648042.html#post3434602 ...

правильно ли я сделал задание?
правильно ли сделано задание? //предположим, что указатель pa был определен...

Правильно ли я сделал?(Математические.Функции)
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt;...


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

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

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