Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Disabled7
1 / 1 / 0
Регистрация: 24.02.2015
Сообщений: 18
1

Constructor delegation follows mem-initializer for

31.05.2015, 15:17. Просмотров 1188. Ответов 6
Метки нет (Все метки)

Подскажите пожалуйста из-за чего возникает проблема при объявление конструктора у наследника
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class manager: virtual public abstr_emp
{
private:
    int inchargeof; // number of abstr_emps managed
protected:
    int InChargeOf() const { return inchargeof; } // output
    int & InChargeOf(){ return inchargeof; } // input
public:
manager::manager():abstr_emp(){}
manager(const abstr_emp &e, int ico):abstr_emp(e),inchargeof(ico){}
manager(const manager &m):abstr_emp(m),manager(m){}// ошибка возникает в этой строчке 
manager(const std::string &fn, const std::string &ln, const std::string &j, int ico):abstr_emp(fn,ln,j),inchargeof(ico){}
    virtual void ShowAll() const;
    virtual void SetAll();
};
C++
1
2
3
D:\Projects\C\14\Task5\T1405\emp.cpp:45: ошибка: constructor delegation follows mem-initializer for 'abstr_emp'
 manager::manager(const manager &m):abstr_emp(m),manager(m){}
                                                          ^
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2015, 15:17
Ответы с готовыми решениями:

Где скачать библиотеку mem.h?
где можно скачать библиотеку для MS Visual Studio библтотеку <mem.h>, и вообще...

Ошибка с отсутствующим initializer
Здравствуйте! Кусок кода ниже: class Number { private: double *num;...

Предупреждение о Extended initializer lists
При использовании функции nanosleep при компиляции g++ выводит следующее:...

Ошибка: expected initializer before 'void'
Выдает ошибку expected initializer before 'void', помогите исправить ...

[Warning] extended initializer lists only available with -std=c++11
#include<iostream> #include<windows.h> #include<ctime> using namespace std;...

6
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
31.05.2015, 15:22 2
как вы думаете чего не хватает в первом посте?????
0
Disabled7
1 / 1 / 0
Регистрация: 24.02.2015
Сообщений: 18
31.05.2015, 16:18  [ТС] 3
Всего кода?
0
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
31.05.2015, 16:25 4
Рано или поздно вы поймете, чего нехватает ) Я верю в вас!
1
Disabled7
1 / 1 / 0
Регистрация: 24.02.2015
Сообщений: 18
31.05.2015, 16:41  [ТС] 5
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// emp.h -- header file for abstr_emp class and children
#include <iostream>
#include <string>
class abstr_emp
{
private:
    std::string fname; // abstr_emp's first name
    std::string lname; // abstr_emp's last name
    std::string job;
public:
    abstr_emp();
    abstr_emp(const std::string & fn, const std::string & ln,
              const std::string & j);
    abstr_emp(const abstr_emp & a);
    virtual void ShowAll() const; // labels and shows all data
    virtual void SetAll(); // prompts user for values
    friend std::ostream & operator<<(std::ostream & os, const abstr_emp & e);
 
    // just displays first and last name
    virtual ~abstr_emp() = 0; // virtual base class
};
class employee : public abstr_emp
{
public:
    employee();
    employee(const std::string & fn, const std::string & ln,
             const std::string & j);
    virtual void ShowAll() const;
    virtual void SetAll();
};
class manager: virtual public abstr_emp
{
private:
    int inchargeof; // number of abstr_emps managed
protected:
    int InChargeOf() const { return inchargeof; } // output
    int & InChargeOf(){ return inchargeof; } // input
public:
    manager();
    manager(const std::string & fn, const std::string & ln,
            const std::string & j, int ico = 0);
    manager(const abstr_emp & e, int ico);
    manager(const manager & m);
    virtual void ShowAll() const;
    virtual void SetAll();
};
class fink: virtual public abstr_emp
{
private:
    std::string reportsto; // to whom fink reports
protected:
    const std::string ReportsTo() const { return reportsto; }
    std::string & ReportsTo(){ return reportsto; }
public:
    fink();
    fink(const std::string & fn, const std::string & ln,
         const std::string & j, const std::string & rpo);
    fink(const abstr_emp & e, const std::string & rpo);
    fink(const fink & e);
    virtual void ShowAll() const;
    virtual void SetAll();
};
class highfink: public manager, public fink // management fink
{
public:
    highfink();
    highfink(const std::string & fn, const std::string & ln,
             const std::string & j, const std::string & rpo,
             int ico);
    highfink(const abstr_emp & e, const std::string & rpo, int ico);
    highfink(const fink & f, int ico);
    highfink(const manager & m, const std::string & rpo);
    highfink(const highfink & h);
    virtual void ShowAll() const;
    virtual void SetAll();
};
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include "emp.h"
using std::cout;
using std::endl;
using std::cin;
using std::getline;
 
abstr_emp::abstr_emp():fname("unknown"),lname("unknown"),job("unknown"){}
abstr_emp::abstr_emp(const abstr_emp &a){
fname=a.fname;
lname=a.lname;
job=a.job;
}
abstr_emp::abstr_emp(const std::string &fn, const std::string &ln, const std::string &j):fname(fn),lname(ln),job(j){}
//abstr_emp::abstr_emp(const abstr_emp & a):abstr_emp(a){}
void abstr_emp::ShowAll()const
{
    cout<<"Mr."<<fname<<" "<<lname<<". His job is "<<job<<endl;
}
void abstr_emp::SetAll()
{
    cout<<"Please write your name: ";getline(cin,fname);
    cout<<"Ok Mr."<<fname<<" what is your lastname?";getline(cin,lname);
    cout<<"So you do ..?: ";getline(cin,job);
}
std::ostream &operator<<(std::ostream & os,const abstr_emp & a)
{
    os<<"Mr."<<a.fname<<" "<<a.lname<<endl;
    return os;
}
 
employee::employee():abstr_emp(){}
employee::employee(const std::string &fn, const std::string &ln, const std::string &j):abstr_emp(fn,ln,j){}
void employee::ShowAll()const
{
    abstr_emp::ShowAll();
}
void employee::SetAll()
{
    abstr_emp::SetAll();
}
 
manager::manager():abstr_emp(){}
manager::manager(const abstr_emp &e, int ico):abstr_emp(e),inchargeof(ico){}
manager::manager(const manager &m):abstr_emp(m),manager(m){}
manager::manager(const std::string &fn, const std::string &ln, const std::string &j, int ico):abstr_emp(fn,ln,j),inchargeof(ico){}
void manager::ShowAll()const
{
    abstr_emp::ShowAll();
    cout<<"Has manage "<<inchargeof<<" people"<<endl;
}
void manager::SetAll(){
    abstr_emp::SetAll();
    cout<<"How many people do you in charge of?: ";cin>>inchargeof;while(cin.get()!='\n')continue;
}
 
fink::fink():abstr_emp(){}
fink::fink(const abstr_emp &e, const std::string &rpo):abstr_emp(e),reportsto(rpo){}
fink::fink(const fink &e):abstr_emp(e),fink(e){}
fink::fink(const std::string &fn, const std::string &ln, const std::string &j, const std::string &rpo):abstr_emp(fn,ln,j),reportsto(rpo){}
void fink::ShowAll()const
{
    abstr_emp::ShowAll();
    cout<<"Has reports to "<<reportsto<<endl;
}
void fink::SetAll(){
    abstr_emp::SetAll();
    cout<<"To whom do you make reports?: ";getline(cin,reportsto);
}
 
highfink::highfink():abstr_emp(),manager(),fink(){}
highfink::highfink(const abstr_emp &e, const std::string &rpo, int ico):abstr_emp(e),fink(e,rpo),manager(e,ico){}
highfink::highfink(const fink &f, int ico):abstr_emp(f),manager(f,ico){}
highfink::highfink(const highfink &h):abstr_emp(h),manager(h),fink(h){}
highfink::highfink(const manager &m, const std::string &rpo):abstr_emp(m),fink(m,rpo),manager(m){}
highfink::highfink(const std::string &fn, const std::string &ln, const std::string &j, const std::string &rpo, int ico):abstr_emp(fn,ln,j),fink(fn,ln,j,rpo),manager(fn,ln,j,ico){}
 
void highfink::ShowAll()const
{
    abstr_emp::ShowAll();
    cout<<"Has reports to "<<fink::ReportsTo()<<endl;
    cout<<"Has manage "<<manager::InChargeOf()<<" people"<<endl;
}
void highfink::SetAll(){
    abstr_emp::SetAll();
    cout<<"To whom do you make reports?: ";getline(cin,fink::ReportsTo());
    cout<<"How many people do you in charge of?: ";cin>>manager::InChargeOf();while(cin.get()!='\n')continue;
}
0
DrOffset
8141 / 4722 / 1154
Регистрация: 30.01.2014
Сообщений: 7,690
31.05.2015, 16:59 6
Лучший ответ Сообщение было отмечено Disabled7 как решение

Решение

Цитата Сообщение от Disabled7 Посмотреть сообщение
из-за чего возникает проблема при объявление конструктора у наследника
Цитата Сообщение от Disabled7 Посмотреть сообщение
,manager(m)
А зачем там вот это написано?

С С++11 доступна возможность вызывать конструкторы класса из других конструкторов этого же класса, возможность называется delegating constructors.
Однако такая запись, как у тебя, не разрешена по причине неизбежной двойной инициализации, в случае, если в конструкторе, который делегирует инициализацию другому конструктору, помимо этого делегирования есть еще какая-то инициализация. В твоем случае, была проведена инициализация базового класса, затем было проведено делегирование (которое тоже вызывает инициализацию базового класса). Кроме того, тут еще и рекурсия бесконечная, т.к. конструктор, который ты делегируешь, тот же самый.
1
Disabled7
1 / 1 / 0
Регистрация: 24.02.2015
Сообщений: 18
31.05.2015, 17:27  [ТС] 7
Понял, спасибо)
0
31.05.2015, 17:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2015, 17:27

Linux: initializer-string for array of chars is too long
Возникла серьезная проблема: создаю массив с текстом: const char text = {...

Как исправить [Error] expected initializer before 'bool'?
#include &lt;string.h&gt; #include &lt;cstring&gt; int main() bool exists = false;...

Ругается на 10-ю строку (error expected initializer before 'srand')
Компилятор ругается на 10-ю строку не могу понять только почему...


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

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

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