Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> доступность классов, исправлял программу и она умерла. 
V
    Опции темы
fuckingniger
Дата 24.10.2010, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



main:
Код

# include <iostream>
# include <string>
# include "company.h"
# include "worker_percent_plus_base.h"
using namespace std;

int main ()
{
    company head_company;
    worker worker_1("Ivan","Petrov",573,head_company);
    worker worker_2("Egor","sergeev",123,head_company);
    worker worker_3("Evgeniy","Matveev",666,head_company);
    worker worker_4("Petr","Ivanov",12000,head_company);
    return 0;
}


class company: 
Код

#ifndef COMPANY_H
#define COMPANY_H
# include "worker.h"
# include <string>
using namespace std;
class company 
{
private :
    name employees_list[1000];
    int number_employee;
public :
    company();
    void add_in_list(string first , string  last );
    void add_in_list( worker w_1 );
    int  get_number_employee();
    void print ();
};

#endif

Код

# include <iostream>
# include "company.h"
# include "worker.h"
using namespace std;

    company::company():number_employee(0)
    {}
    void company::add_in_list(string first , string  last )
    {
        employees_list[number_employee].first_name=first;
        employees_list[number_employee++].last_name=last;
    }
    void company::add_in_list( worker w_1 )
    {
        employees_list[number_employee].first_name=w_1.get_first_name();
        employees_list[number_employee++].last_name=w_1.get_last_name();
    }
    int  company::get_number_employee()
    {
        return number_employee;
    }
    void company::print ()
    {
        cout << "at this company works " <<get_number_employee() <<" persons:\n";
        for (int i=0;i<number_employee; i++)
            cout <<"\t" <<employees_list[i].first_name<< " "<< employees_list[i].last_name<<endl; 
        cout << endl;
    }


class worker:
Код

#ifndef WORKER_H
#define WORKER_H
# include "company.h"
# include <string>
using namespace std;
struct name
{
    string first_name;
    string last_name;
};
class worker
{
private:
    string first_name;
    string last_name;
    int time_of_work;
public:
    worker(string s1, string s2 , int time,company company_1);
    string get_first_name();
    string get_last_name();
    void print();
};
#endif


Код

# include <iostream>
# include "worker.h"


worker::worker(string s1, string s2 , int time,company head_company):first_name(s1), last_name(s2), time_of_work(time) 
    {
        head_company.add_in_list(s1,s2);
    }
string worker::get_first_name()
    {
        return first_name;
    }
string worker::get_last_name()
    {
        return last_name;
    }
void worker::print()
    {    
        cout << get_first_name() << " " << get_last_name()<<endl;
        cout<<"\t"<< "his experience is " << time_of_work << " days\n";
    }



просто куча ошибок выдаётся - эти классы как будто друг друга не видят и ещё не нравится передача последнего аргумента классу worker

например

Код

error C2061: syntax error : identifier 'company'
 error C2661: 'worker::worker' : no overloaded function takes 4 arguments
 error C2661: 'worker::worker' : no overloaded function takes 4 arguments
 error C2661: 'worker::worker' : no overloaded function takes 4 arguments
 error C2661: 'worker::worker' : no overloaded function takes 4 arguments
1>worker.cpp

вот например не понимаю что ему company не нравится

Это сообщение отредактировал(а) fuckingniger - 24.10.2010, 19:39
PM MAIL   Вверх
fuckingniger
Дата 24.10.2010, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



люди, человеки помогите пожалуйста!
PM MAIL   Вверх
mes
Дата 24.10.2010, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(fuckingniger @  24.10.2010,  18:12 Найти цитируемый пост)
#ifndef COMPANY_H
#define COMPANY_H
# include "worker.h"


Цитата(fuckingniger @  24.10.2010,  18:12 Найти цитируемый пост)
#ifndef WORKER_H
#define WORKER_H
# include "company.h"


рекурсивное включение.. читайте про forward declaration.. 



--------------------
PM MAIL WWW   Вверх
fuckingniger
Дата 24.10.2010, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



ого ...а  я думал обертывание рулит...
может поможете, скаав что сделать - просто срочно надо сделать
PM MAIL   Вверх
mes
Дата 24.10.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



в worker.h убрать #include "company.h"
и дописать объявление класса : class company; 


--------------------
PM MAIL WWW   Вверх
fuckingniger
Дата 24.10.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



в worker.cpp
Код


worker::worker(string s1, string s2 , int time,company head_company):first_name(s1), last_name(s2), time_of_work(time) 
    {
        head_company.add_in_list(s1,s2);
    }

ругается на это такими словами:
Код

: error C2027: use of undefined type 'company'
: see declaration of 'company'
 : error C2228: left of '.add_in_list' must have class/struct/union



Добавлено через 1 минуту и 39 секунд
worker.h теперь такой

Код

#ifndef WORKER_H
#define WORKER_H
# include <string>
using namespace std;
class company;
struct name
{
    string first_name;
    string last_name;
};
class worker
{
private:
    string first_name;
    string last_name;
    int time_of_work;
public:
    worker(string s1, string s2 , int time,company company_1);
    string get_first_name();
    string get_last_name();
    void print();
};
#endif


Это сообщение отредактировал(а) fuckingniger - 24.10.2010, 20:06
PM MAIL   Вверх
mes
Дата 24.10.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



smile, ну так в worker.cpp естественно нужно добавить #include "company.h"
главное чтоб хидеры рекурсивно друг друга не включали 
smile



--------------------
PM MAIL WWW   Вверх
fuckingniger
Дата 24.10.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



ага ...спасибо ...количество ошибок значительно уменьшилось только в 1 из потомков появилась ещё интересная ошибка


Код

worker_procent_of_sum(std::string,std::string,int,company,double,double)' : cannot convert parameter 4 from 'company' to 'company'
worker_with_base::worker_with_base(std::string,std::string,int,company,double)' : cannot convert parameter 4 from 'company' to 'company'

в конструкторе
Код

worker_with_base::worker_with_base(string f,string l,int days,company company_1, double fix):worker(f,l,days,company_1),base(fix)
{}


и ещё 2 там ошибочки осталось ....

PM MAIL   Вверх
mes
Дата 24.10.2010, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(fuckingniger @  24.10.2010,  19:27 Найти цитируемый пост)
worker_procent_of_sum

у вас в этом .cpp стоит #include "company" ?


Цитата(fuckingniger @  24.10.2010,  19:27 Найти цитируемый пост)
,company

вы передаете company как значение, а значит работаете внутри функции (конструктора) уже с копией а не оригиналом.. 



--------------------
PM MAIL WWW   Вверх
fuckingniger
Дата 24.10.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



поставил по ссылке и всё хорошо стало ... mes ты меня просто спас!

Добавлено через 8 минут и 56 секунд
только осталась 1 проблема ....у меня вот как наследование идёт 
                                worker
                            /               \
worker_with_base           worker_procent_of_sum

                          \                  /
                  worker_procent_plus_base
и из-за этого 2 раза в конструкторе  worker_procent_plus_base инициализируются некоторые данные .....
но это ерунда кроме  того что там делается с объектом класса company 
не знаю даже как избавиться от этого ....прописывать отдельный конструктор в во всех предках  не хочется как-то
PM MAIL   Вверх
djamshud
Дата 24.10.2010, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Виртуальное наследование спасет компанию и Национального Лидера!

Добавлено через 46 секунд
Хм. Там рабочий.. И с чего это мне привиделась компания?)


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
fuckingniger
Дата 24.10.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



Код

Виртуальное наследование спасет компанию и Национального Лидера!


его нельзя использовать) (ну в общем я и не умею пока))

Код

Хм. Там рабочий.. И с чего это мне привиделась компания?)


О чём это?)
PM MAIL   Вверх
mes
Дата 24.10.2010, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(fuckingniger @  24.10.2010,  20:51 Найти цитируемый пост)
его нельзя использовать) (ну в общем я и не умею пока))

ну чтоб использовать его, многого знать ненужно : class D : public virtual Base; 
а вот нужно ли ?! глядя на схему возникает явное впечатление, о неправильности композиции.. 
но как я понял у вас времени на переделку не осталось... 




--------------------
PM MAIL WWW   Вверх
fuckingniger
Дата 24.10.2010, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 1.10.2010

Репутация: нет
Всего: 1



mes   да,но думаю прокатит, потому, что просто надо показать что в программе используется простое и множественное наследование ....
PM MAIL   Вверх
djamshud
Дата 25.10.2010, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



fuckingniger, так это у вас не просто множественное наследование. Может быть достаточно продемонстрировать что-нибудь без сведения нескольких веток наследования в один класс? Сделать просто:

Код

class a;
class b;
class c:a,b;



--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.