Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390

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

07.03.2010, 15:04. Показов 4740. Ответов 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)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2010, 15:04
Ответы с готовыми решениями:

Что я не правильно сделал?
Есть задача: Есть три действительных числа, удвоить их если x&gt;=y&gt;=z и заменить их абсолютными величинами если это не так. { ...

Что-то не правильно сделал
Друзья! Разбирался с шаблоном форума, и столкнулся с проблемой... Картинка (Вообщем на картинке понятно) Нужно чтобы поле сообщений...

Прошу проверить. Не уверен, что сделал правильно
Доброе утро, форумчане! У меня такая вот проблема. С Mathcadом вообще не знаком, но нужно срочно сделать 14 задач до вечера. Так...

23
32 / 32 / 16
Регистрация: 18.08.2009
Сообщений: 93
07.03.2010, 15:18
Линковщик не видит реализации ф-ций
int getyears() const;
int setyears(int sage);
int getsal() const;
int setsal(int sage);
в .cpp файле.
Добавь реализацию.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
07.03.2010, 15:48  [ТС]
SerЁga, что за реализация и как добавить
0
 Аватар для Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
07.03.2010, 16:02
А у тебя в файле emloye.cpp где директива #include "emloye.hpp" ?
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
07.03.2010, 16:09  [ТС]
Amarted, там просто не скопировал...есть она там
0
32 / 32 / 16
Регистрация: 18.08.2009
Сообщений: 93
07.03.2010, 17:32
Добавь в .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
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
07.03.2010, 20:26
есть еще вариант: в .hpp написать после объявления заголовочных файлов
#ifndef __employee
#define __employee
и в самом конце файла - #endif
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
07.03.2010, 20:56  [ТС]
Цитата Сообщение от Vorona Посмотреть сообщение
#ifndef __employee
#define __employee
в книгах такое нету
Цитата Сообщение от SerЁga Посмотреть сообщение
Эти ф-ции ничего делать не будут, но ошибки должны уйти.
А потом в ф-циях напишишь то что надо.
почему?...эти функции возвращают числа
0
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
07.03.2010, 22:44
Цитата Сообщение от МедведЪ Посмотреть сообщение
Сообщение от Vorona Посмотреть сообщение
#ifndef __employee
#define __employee
в книгах такое нету
в книгах много чего нету, но эти директивы должны быть и такой способ посоветовал преподователь, впринципе мне часто помогало.. и в конце #endif не забудь
можно еще указать полный путь нахождения .hpp файла только в таких <> скобках, а не ковычках или посмотреть настройки компилятора..
1
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
07.03.2010, 22:45  [ТС]
Цитата Сообщение от Vorona Посмотреть сообщение
в книгах много чего нету, но эти директивы должны быть и такой способ посоветовал преподователь, впринципе мне часто помогало.. и в конце #endif не забудь
можно еще указать полный путь нахождения .hpp файла только в таких <> скобках, а не ковычках или посмотреть настройки компилятора..
спасибо за инфу,но зы я по книге прохожу,все имет свое место
0
 Аватар для Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
07.03.2010, 22:57
Странно у меня всё работает, причем без всяких директив типа #define и тд... только вот не пойму зачем тебе #include <windows.h>? напиши полный код всех трёх файлов, включая меин. Если у тебя выходят такие ошибки то скорей всего какойто файл у тебя включается дважды.
0
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
07.03.2010, 23:26
хм, скомпилировал твой код (с исправлениями employee:: ), все работает)

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

вспомнил, а ты создал проект?
вот распределил все по трем файлам, не работало, а создал проект и подключил туда main.cpp employee.cpp, все работает
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
07.03.2010, 23:30
Цитата Сообщение от МедведЪ Посмотреть сообщение
в книгах такое нету
Любой стандартный заголовочный файл открой. Лежат где-нибудь, вроде c:\Program Files\Microsoft Visual Studio 8\VC\include.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
07.03.2010, 23:36  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Любой стандартный заголовочный файл открой. Лежат где-нибудь, вроде c:\Program Files\Microsoft Visual Studio 8\VC\include.
зачем Оо
0
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
08.03.2010, 00:07
Лучший ответ Сообщение было отмечено как решение

Решение

Вот в таком виде всё 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
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
08.03.2010, 00:12  [ТС]
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
На что компилятор возмутится.
Один раз я так попал. С тех пор ifndef постоянно юзаю.
не,ну я понимаю что это можно,но почему в книге об этом не говорится,а?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
08.03.2010, 00:48
Цитата Сообщение от МедведЪ Посмотреть сообщение
не,ну я понимаю что это можно,но почему в книге об этом не говорится,а?
Читай правильные книги!
КиР 4.11.3. Условная компиляция.
1
 Аватар для Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
08.03.2010, 02:52
Цитата Сообщение от МедведЪ Посмотреть сообщение
не,ну я понимаю что это можно,но почему в книге об этом не говорится,а?
Потому что книги это книги, часто бывает и такое, что читаешь пол книги, в главах описываються разные вопросы, приводятся в качестве примера код, а потом, грубо говоря под конец книги ты узнаешь, что все эти коды не компилируются потому что в них не используеться, казалосьбы такая ерунда, как стандартное простраство имент( тобеж std) и тебе прямым текстом пишут что все это сделали специально чтоб, как бы не нагружать читателя, или что либо подобное... так что просто как ты хотел, следовать книге, это можно сказать как минимум не разумно, в том смысле что если об этом не сказано в этой книге, то об этом сказано в другой книге, и зацикливаться на той книге которую ты сейчас читаешь, очень даже не стоит! ( если что не понятно здесь то поищи это там...). Я сам прошел через это, может кто со мной и не согласится но такое уж моё мнение, прислушатся к нему или нет, это дело сугубо личное.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
08.03.2010, 09:55  [ТС]
easybudda, ну спс...снова из за книг начинаю разочароваться в С++ и не любить....так же как и стало с явой...какая то тупая книга которая сразу начинается с классов...и тупая прога нетбинс,который не разрешает менять стд коды актив х-ов
0
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
08.03.2010, 11:42
Цитата Сообщение от МедведЪ Посмотреть сообщение
...снова из за книг начинаю разочароваться в С++ и не любить...
Всегда говорил что самый лучший учитель - компилятор.
А книги - это что-то типа русского хелпа к нему
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2010, 11:42
Помогаю со студенческими работами здесь

Сделал тестовое задание, ответили что я джун плюс, объясните что я сделал не так
Недавно попросили сделать вот это тестовое задание...

Вылетают файлы Python. Не понимаю что я сделал не правильно
Всем, здравствуйте! Не давно решил создать свой сайт. И Python File открывается и даже загружается не много, но вылетает. ( Я постарался...

Подскажите пожалуйста, что не так сделал и как нужно написать правильно
Идея такова : даны уравнения прямых а1х+b1y=c1, a2x+b2y=c2, a3x+b3y=c3. Выяснить, какие из этих прямых параллельны, а какие - нет.Само по...

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru