Форум программистов, компьютерный форум CyberForum.ru

Почему компилятор требует inline для конструктора? - C++

Восстановить пароль Регистрация
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
09.06.2014, 14:32     Почему компилятор требует inline для конструктора? #1
Здравствуйте.
Соб-сно, вопрос озвучен в теме для этого конструктора:
C++
1
2
3
4
5
6
7
8
inline Enrollee::in_choices_exc::in_choices_exc(const string& mesg, const string& pl, const int* ch)
        : runtime_error(mesg)
{
    data = unique_ptr<int []>(new int [NUM]);
    place = pl;
    for (int i = 0; i < NUM; ++i)
        data[i] = *(ch + i);
}
Ну и класс Enrollee:
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
class Enrollee {
public:
 
    enum Specs {
        NOA = 0, MT = 1, ET, POL = 50, ACC = 100, LOG
    };
    
    Enrollee();
    explicit Enrollee(const string&, int, int, int*);
    explicit Enrollee(const string&);
    explicit Enrollee(const Enrollee&);
    virtual ~Enrollee();
    
    const string Name() const { return name; }
    const int GradeMath() const { return gradeMath; }
    const int GradeUL() const { return gradeUL; }
    const int* Choices() const { return choices; }
    
    Enrollee& operator=(const Enrollee&);
    friend ostream& operator<<(ostream&, const Enrollee&);
    
    //exception classes
    class in_choices_exc : public runtime_error {
    private:
        string place;
        unique_ptr<int []> data;
    public:
        in_choices_exc(const string&, const string&, const int*);
        ~in_choices_exc();
        
        const string where() { return place; }
    };
    
private:
    string name;
    int gradeMath, gradeUL;
    enum { NUM = 3 };
    int choices[NUM];
    
    void SetName(const string& n) { name = n; }
    void SetGradeMath(const int gm) { gradeMath = gm; }
    void SetGradeUL(const int gul) { gradeUL = gul; }
    void SetChoices(const int* const);
    
 
};
Уже не первый раз с этим сталкиваюсь - прошу разъяснить, пожалуйста...

Ах, да, вот вывод g++, если без inline:
In function `Enrollee::in_choices_exc::in_choices_exc(std::string const&, std::string const&, int const*)':
/home/drew/Документы/dev/c++/try/RatingCalc/Enrollee.cpp:147: undefined reference to `vtable for Enrollee::in_choices_exc'
collect2: error: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/ratingcalc] Ошибка 1
make[2]: Выход из каталога `/home/drew/Документы/dev/c++/try/RatingCalc'
make[1]: *** [.build-conf] Ошибка 2
make[1]: Выход из каталога `/home/drew/Документы/dev/c++/try/RatingCalc'
make: *** [.build-impl] Ошибка 2
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 14:32     Почему компилятор требует inline для конструктора?
Посмотрите здесь:

C++ Почему sqrt требует тип double?
C++ inline функции vs инструкции inline функций
C++ Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline?
C++ Почему программа продолжает работать после удаления конструктора?
Компилятор требует класс, когда необходим шаблон C++
Подскажите, почему не видит переменные a и b? При использовании конструктора C++
Требует int в описании конструктора C++
C++ Инициализация с помощью конструктора без параметров. Почему не нужны скобки?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 06:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru