1 / 1 / 0
Регистрация: 24.02.2015
Сообщений: 18
1

Constructor delegation follows mem-initializer for

31.05.2015, 15:17. Показов 3650. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2015, 15:17
Ответы с готовыми решениями:

Ошибка: Syntax error, "=" constructor but constructor found
Пытался найти решение, но нашел только одну подобную тему и ее решением было убрать '';'' после...

Запись в /dev/mem
Доброго времени суток) Вот помогаю знакомому (он устраивался совсем не программистом, но на него,...

Не могу открыть /dev/mem
запускаю программу, получаю в ответ Failed to open /dev/mem, try checking permissions. под рутом...

MEM:Rootkit.Win32.TDSS.d
По тупости одного нехорошего человека, имею сабж. Как бороться?

6
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
31.05.2015, 15:22 2
как вы думаете чего не хватает в первом посте?????
0
1 / 1 / 0
Регистрация: 24.02.2015
Сообщений: 18
31.05.2015, 16:18  [ТС] 3
Всего кода?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
31.05.2015, 16:25 4
Рано или поздно вы поймете, чего нехватает ) Я верю в вас!
1
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
18470 / 9627 / 2356
Регистрация: 30.01.2014
Сообщений: 16,880
31.05.2015, 16:59 6
Лучший ответ Сообщение было отмечено Disabled7 как решение

Решение

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

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

MEM:Rootkit.Win64.EquationDrug.a
Проблема сходная с проблемой автора темы https://www.cyberforum.ru/viruses/thread1971747.html Раз...

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

[Error] mem: No such file or directory
Писал программу где надо работать со списками но дает ошибку на 3 строке #include &lt;stdio.h&gt;...

Как удалить троян mayachok MEM.7?
Утилита др.веб его удаляет но он вскоре опять появляется. Пробовал вручную как вычитал на форуме,...

Троян MEM:Trojan.Win64.EquationDrug.gen
Здравствуйте, поймал троян MEM:Trojan.Win64.EquationDrug.gen. Касперский ругается постоянно, просит...

atmega максимальная длинна массива в prog mem?
Добрый день. Проект для Аtmega64. Пишу AvrStudyo 5.1 + WinAvr. Могу я создать в памяти массив...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru