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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Преобразование String в Byte C++ http://www.cyberforum.ru/cpp-beginners/thread1203556.html
как преобразовать массив из string (или только string) в byte? допустим, есть массив: string word; string mas; mas=word.begin(); mas=word;
C++ Подсчет количества перестановок при сортировке одномерного массива различными методами Как сделать подсчет количества перестановок? // Сортировка простыми включениями void simplySort(int n, int a) { int i, j, x; for(i=1; i<n; i++){ x = a; j = i-1; while(x<a && j>=0){ a = a; j--; // j = j-1; http://www.cyberforum.ru/cpp-beginners/thread1203544.html
C++ Научиться программировать хотя бы Windows приложения
Всем доброго дня, уже кучу форумов перелазил, перечитал. Суть такая, уже перечитал 5 книг "Hello World!!!", ну сколько можно =) азы считаю освоил от и до, но за что братся дальше не пойму... Посоветуйте в какую сторону (литература, видеопособия) смотреть дальше цель: научится программировать хотябы Windows приложения Какую среду всетаки для этого использовать?? на данный момент стоит...
Подсчитать количество строк текстового файла f, которые содержат цифры C++
Дано файл f.Подсчитать количество строк файла f, которые содержат цифры.
C++ Как сделать задержку окна при запуске файла? http://www.cyberforum.ru/cpp-beginners/thread1203511.html
Переписываю старую программу на RAD Studio C++ Builder. Столкнулся с такой проблемой что при запуске файла это окно сразу закрывается.В Старой программе там появляется окно см. скрин приложенный . Это содержимое bat файла echo off c:\work\suep\exe\name1.exe c:\work\suep\edit\edit.com c:\work\suep\otcet\rabcot.in CLS c:\work\suep\exe\cot9.exe CLSВот запускаю файлы void __fastcall...
C++ Строки в с++ типа явовских Можно ли создать строковый класс типа явовских? Или есть ли готовые решения? Пишу свой мультиплатформенный мини-фреймворм для удобной работы со строками на основе MinGW... (для отладке в винде и компиляции под андроид) Когда-то на лекции расказывали что можно "подделать" даже арифметические операции над строками вроде "+" (для сложения самописных классов вроде таблиц). Работы со строками... подробнее

Показать сообщение отдельно
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
09.06.2014, 14:32     Почему компилятор требует inline для конструктора?
Здравствуйте.
Соб-сно, вопрос озвучен в теме для этого конструктора:
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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru