Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
#1

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

07.03.2010, 15:04. Просмотров 2508. Ответов 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 и срр,что то не правильно сделал,классы (C++):

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

срр файл в нутри срр - C++
можна ли зделать так что бы срр файл выполнялса в нутри главно файла програмы (срр) при нажатии кнопки если да то как ?

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

Правильно ли сделал - C++
Нужно проверить правильно ли я сделал?? #include &lt;iostream.h&gt; #include &lt;math.h&gt; void main() { double k,a,n,m,p; cout...

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

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

23
SerЁga
32 / 32 / 4
Регистрация: 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
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
07.03.2010, 15:48  [ТС] #3
SerЁga, что за реализация и как добавить
0
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
07.03.2010, 16:02 #4
А у тебя в файле emloye.cpp где директива #include "emloye.hpp" ?
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
07.03.2010, 16:09  [ТС] #5
Amarted, там просто не скопировал...есть она там
0
SerЁga
32 / 32 / 4
Регистрация: 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
670 / 532 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
07.03.2010, 20:26 #7
есть еще вариант: в .hpp написать после объявления заголовочных файлов
#ifndef __employee
#define __employee
и в самом конце файла - #endif
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
07.03.2010, 20:56  [ТС] #8
Цитата Сообщение от Vorona Посмотреть сообщение
#ifndef __employee
#define __employee
в книгах такое нету
Цитата Сообщение от SerЁga Посмотреть сообщение
Эти ф-ции ничего делать не будут, но ошибки должны уйти.
А потом в ф-циях напишишь то что надо.
почему?...эти функции возвращают числа
0
Vorona
Peace 2 all shining faces
670 / 532 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
07.03.2010, 22:44 #9
Цитата Сообщение от МедведЪ Посмотреть сообщение
Сообщение от Vorona Посмотреть сообщение
#ifndef __employee
#define __employee
в книгах такое нету
в книгах много чего нету, но эти директивы должны быть и такой способ посоветовал преподователь, впринципе мне часто помогало.. и в конце #endif не забудь
можно еще указать полный путь нахождения .hpp файла только в таких <> скобках, а не ковычках или посмотреть настройки компилятора..
1
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
07.03.2010, 22:45  [ТС] #10
Цитата Сообщение от Vorona Посмотреть сообщение
в книгах много чего нету, но эти директивы должны быть и такой способ посоветовал преподователь, впринципе мне часто помогало.. и в конце #endif не забудь
можно еще указать полный путь нахождения .hpp файла только в таких <> скобках, а не ковычках или посмотреть настройки компилятора..
спасибо за инфу,но зы я по книге прохожу,все имет свое место
0
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
07.03.2010, 22:57 #11
Странно у меня всё работает, причем без всяких директив типа #define и тд... только вот не пойму зачем тебе #include <windows.h>? напиши полный код всех трёх файлов, включая меин. Если у тебя выходят такие ошибки то скорей всего какойто файл у тебя включается дважды.
0
Vorona
Peace 2 all shining faces
670 / 532 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
07.03.2010, 23:26 #12
хм, скомпилировал твой код (с исправлениями employee:: ), все работает)

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

вспомнил, а ты создал проект?
вот распределил все по трем файлам, не работало, а создал проект и подключил туда main.cpp employee.cpp, все работает
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
07.03.2010, 23:30 #13
Цитата Сообщение от МедведЪ Посмотреть сообщение
в книгах такое нету
Любой стандартный заголовочный файл открой. Лежат где-нибудь, вроде c:\Program Files\Microsoft Visual Studio 8\VC\include.
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
07.03.2010, 23:36  [ТС] #14
Цитата Сообщение от easybudda Посмотреть сообщение
Любой стандартный заголовочный файл открой. Лежат где-нибудь, вроде c:\Program Files\Microsoft Visual Studio 8\VC\include.
зачем Оо
0
Delphin_KKC
UNIX-way
710 / 494 / 17
Регистрация: 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
08.03.2010, 00:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2010, 00:07
Привет! Вот еще темы с ответами:

Архитектура программы. Правильно ли сделал? - C++
Собствено с архитектурой вроде определился. Хотелось бы конструктивной критики. Задача по сути следующая: - Считывать данные...

Правильно ли я сделал?(Математические.Функции) - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; int main() { setlocale(0,&quot;&quot;); float pi,rez; ...

Правильно я сделал программу по уравнению? - C++
z=\sqrt{\left|y-2 \right|+3}+\frac{x+\frac{y}{2}}{2\left|1+y \right|}\left(x+1 \right) вот что у меня получилось ...

Правильно ли я всё сделал? CGI и Visual C++ - C++
Долго занимался RTFMом STFW. Врезультате получилось всё вот так: 1. Создал проект консольного приложения в Visual Studio. #include...


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

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

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