Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ошибка в классе


Автор: Berkut 24.3.2004, 21:24
Саздал класс: employee.h

#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include <string>
using namespace std;
namespace def_employee
{
class Employee
{
public:
Employee();
Employee(string a);
string get_a();
void change_a( string new_a );
};
}
#endif

Создал файл реализации класса:

#include "Employee.h"
#include <string.h>
#include<iostream>

Employee::get_a(string a)
{
cout<<a<<endl;
return 0;

}

компилятор выдает такую шибку: 'Employee' : is not a class or namespace name (указывает на строчку Employee::get_a(string a))


Автор: Stalk 24.3.2004, 22:57
Код
string Employee::get_a(string a)
Имя функции ты-то написал, а тип возвращаемого значения?
Код
string something();
и
Код
int something();
не одно и тоже.

Автор: Berkut 24.3.2004, 23:17
Все равно там же ошибка hmmm.gif

Автор: Coocky 24.3.2004, 23:27
Попробуй создай Inline функцию
Код
Employee::get_a(string a)
прямо в классе

Автор: Berkut 24.3.2004, 23:39
С Inline функцией этой ошибки нет, но мне надо именно без Inline функции hmmm.gif

Автор: bel_nikita 25.3.2004, 00:35
Berkut
Цитата
namespace def_employee
{
class Employee
{
public:
Employee();
Employee(string a);
string get_a();
void change_a( string new_a );
};
}

Цитата

#include "Employee.h"
#include <string.h>
#include<iostream>
Employee::get_a(string a)
{
cout<<a<<endl;
return 0;

}

А namespace где потерял??
Добавь using namespace def_employee;

Автор: ??? 25.3.2004, 18:10
Чего-то я понять немогу. Определение функции такое:

string get_a();

А сама функция описывается как:

Employee::get_a(string a)
{
cout<<a<<endl;
return 0;
}

???

Автор: Berkut 25.3.2004, 18:37
bel_nikita спасибо за помощь, но вот теперь еще одна ошибка, правда теперь не понятно где:

#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include <string>
using namespace std;
namespace def_employee
{
class Employee
{
public:
Employee();
Employee(string a);
string get_a();
void change_a( string new_a );
};
}
#endif

Создал файл реализации класса:

#include "Employee.h"
#include <string.h>
#include<iostream>
using namespace def_employee;

Employee::get_a(string a)
{
cout<<a<<endl;
return 0;

}

Ну с сам main()

#include<iostream>
#include "Employee.h"
#include "HourlyEmployee.h"
using namespace def_employee;
main()
{
Employee a;
string a="dsgfsg";
a.get_a(a);
return 0;
}

Так вот компилятор выдает такую штуку:
error LNK2001: unresolved external symbol "public: __thiscall def_employee::Employee::Employee(void)" (??0Employee@def_employee@@QAE@XZ)
fatal error LNK1120: 1 unresolved externals mad.gif



Автор: sergejzr 25.3.2004, 18:39
Добавь Employee.cpp в свой проект.

Автор: Berkut 25.3.2004, 18:47
Непомогает, таже ошибка sad.gif

Автор: sergejzr 25.3.2004, 18:58
Всё ясно!
В теле класса ты задекларировал
Код

string get_a();


А в .сpp
Код

Employee::get_a(string a)

А следует:
Код

string Employee::get_a(string a){}
//или
string Employee::get_a(){}


Определяйся, что функция получает, а что отдаёт smile.gif



Автор: Berkut 25.3.2004, 19:21
sergej.z ,непомогает, таже ошибка, для простототы я пока даже string опустил.

Автор: ??? 25.3.2004, 19:23
Цитата(sergej @ 25.3.2004, 18:58)
Всё ясно!
В теле класса ты задекларировал
Код

string get_a();


А в .сpp
Код

Employee::get_a(string a)

А следует:
Код

string Employee::get_a(string a){}
//или
string Employee::get_a(){}


Определяйся, что функция получает, а что отдаёт smile.gif

Ага, только я это уже до тебя сказал.

Автор: Berkut 25.3.2004, 19:29
Пусть будет без string:
get_a();
Ошибка осталась то hmmm.gif

Автор: Fantasist 25.3.2004, 20:05
Цитата
error LNK2001: unresolved external symbol "public: __thiscall def_employee::Employee::Employee(void)" (??0Employee@def_employee@@QAE@XZ)


У конструктора нету тела.

Автор: sergejzr 25.3.2004, 20:07
А где в .срр конструктора итд?
Вот готовый проект для MSVC++
http://www.iwi-iuk.org:8081/employee.zip


Добавлено @ 20:08

Во, Fantasist опередил smile.gif

Добавлено @ 20:13
???
Цитата

Ага, только я это уже до тебя сказал.

Ага, только ошибка другая была smile.gif

Автор: Berkut 25.3.2004, 20:32
Спасибо большое, вроде разобрался smile.gif

Автор: shadowmaan 25.3.2004, 21:27
В файле реализации не надо писать

using namespace def_employee;

надо включить реализацию в этот namespace, т. е.

namespace def_employee {

string Employee::get_a()
{
//....
}

}

Извиняюсь. Ерунду сказал. Больше не буду smile.gif

Автор: Fantasist 25.3.2004, 22:28

Кстати using namespace как раз таки на мой взгляд использовать можно только в файлах реализации. Да и то аккуратно. Если везде использовать using namespace, то смысл namespace'ов почти пропадает. Хотя, конечно, в небольших проектах это пофиг.

Автор: Borisff2003 26.3.2004, 06:20
И у второго конструктора, тоже нет тела и у change_a biggrin.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)