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

Нет соответствия таблице виртуальных функций - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Поиск заданной подстроки в строке (алгоритм Кнута-Морриса-Пратта) http://www.cyberforum.ru/cpp-beginners/thread1183665.html
Привет всем. Мне нужно написать программу поиска заданной подстроки в строке. Если подстрока есть - вывести YES. Если нет - NO. Задача называется Кнут-Моррис-Пратт, так что я понял, что нужно решить ее с помощью алгоритма КМП. Я прочитал о нем в интернете, но не могу понять,как реализовать его на практике. Покажите,если это вам не составит труда. Заранее спасибо.
C++ Обработка двумерного динамического массива Напишите программа буду очень благодарна =) Написать программу, в которой создаются динамические массивы и выполнить их обработку в соответствии со своим вариантом. 9. Сформировать двумерный массив. Добавить в него столбец с заданным номером; http://www.cyberforum.ru/cpp-beginners/thread1183630.html
C++ Работа со списками
Напишите программу =* Написать программу, в которой создаются динамические структуры и выполнить их обработку в соответствии со своим вариантом. Для каждого вариант разработать следующие функции: 1. Создание списка. 2. Добавление элемента в список (в соответствии со своим вариантом). 3. Удаление элемента из списка (в соответствии со своим вариантом). 4. Печать списка. 5. Запись списка в...
C++ Скопировать из файла F1 в файл F2 все строки, которые содержат только одно слово
напишите пожалуйста код:flirt: 1. Создать текстовый файл F1 не менее, чем из 10 строк и записать в него информацию 2. Выполнить задание. Скопировать из файла F1 в файл F2 все строки, которые содержат только одно слово. Найти самое длинное слово в файле F2.
C++ Сформировать матрицу, добавить в нее столбец с заданным номером http://www.cyberforum.ru/cpp-beginners/thread1183605.html
Напишите код пожалуйста буду благодарна :flirt: Написать программу, в которой создаются динамические массивы и выполнить их обработку в соответствии со своим вариантом. Сформировать двумерный массив. Добавить в него столбец с заданным номером;
C++ Вызов специфических для потомка функций, не зная класса потомка Доброго времени суток. Когда-то давно делал работу в C#, а сейчас захотел повторить то же в C++. Затык вот в чем. был у меня код подобного вида: interface ICell { подробнее

Показать сообщение отдельно
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
21.05.2014, 17:26     Нет соответствия таблице виртуальных функций
Здравствуйте!
Вот что мне выдает компилятор:
build/Debug/GNU-Linux-x86/main.o: In function `Gunslinger::Gunslinger(char const*, char const*, int, float)':
/home/drew/Документы/dev/c++/Stephen Prata/14.4_NB/Person.hpp:48: undefined reference to `vtable for Gunslinger'
/home/drew/Документы/dev/c++/Stephen Prata/14.4_NB/Person.hpp:48: undefined reference to `vtable for Gunslinger'
build/Debug/GNU-Linux-x86/main.o: In function `Pokerplayer::Pokerplayer(char const*, char const*)':
/home/drew/Документы/dev/c++/Stephen Prata/14.4_NB/Person.hpp:81: undefined reference to `vtable for Pokerplayer'
/home/drew/Документы/dev/c++/Stephen Prata/14.4_NB/Person.hpp:81: undefined reference to `vtable for Pokerplayer'
build/Debug/GNU-Linux-x86/main.o: In function `BadDude::BadDude(char const*, char const*, int, float)':
/home/drew/Документы/dev/c++/Stephen Prata/14.4_NB/Person.hpp:102: undefined reference to `VTT for BadDude'
/home/drew/Документы/dev/c++/Stephen Prata/14.4_NB/Person.hpp:102: undefined reference to `VTT for BadDude'
/home/drew/Документы/dev/c++/Stephen Prata/14.4_NB/Person.hpp:102: undefined reference to `vtable for BadDude'
/home/drew/Документы/dev/c++/Stephen Prata/14.4_NB/Person.hpp:102: undefined reference to `vtable for BadDude'
/home/drew/Документы/dev/c++/Stephen Prata/14.4_NB/Person.hpp:102: undefined reference to `vtable for BadDude'
collect2: error: ld returned 1 exit status


Листинги файлов:

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
89
90
91
92
93
94
95
96
#ifndef PERSON_HPP
#define PERSON_HPP
#include <string>
#include <iostream>
 
class Person {
public:
 
    Person(const char* n = "none", const char* sn = "none")
    {
        nm = std::string(n); snm = std::string(sn);
    }
    Person(const Person& orig);
    virtual ~Person() = 0;
    virtual void Set();
    virtual void Show() const;
private:
    std::string nm;
    std::string snm;
};
 
class Gunslinger : virtual public Person {
public:
 
    Gunslinger(const char* n = "none", const char* sn = "none",
        int no = 0, float r = 0)
    : Person(n, sn)
    {
        notching = no; readytoshoot = r;
    }
 
    Gunslinger(const Gunslinger& orig)
    : Person(orig)
    {
        notching = orig.notching;
        readytoshoot = orig.readytoshoot;
    }
    virtual ~Gunslinger();
 
    void Set();
    void Show() const;
 
    float Draw() const
    {
        return readytoshoot;
    }
 
protected:
    void Data() const;
private:
    int notching;
    float readytoshoot;
 
};
 
class Pokerplayer : virtual public Person {
public:
 
    Pokerplayer(const char* n = "none", const char* sn = "none")
    : Person(n, sn)
    {
    }
 
    Pokerplayer(const Pokerplayer& orig)
    : Person(orig)
    {
    }
    virtual ~Pokerplayer();
    void Set();
    void Show() const;
    void Draw() const;
protected:
    void Data() const;
};
 
class BadDude : public Gunslinger, public Pokerplayer {
public:
 
    BadDude(const char* n = "none", const char* sn = "none",
        int no = 0, float r = 0)
    : Person(n, sn), Gunslinger(n, sn, no, r), Pokerplayer(n, sn)
    {
    }
 
    BadDude(const BadDude& orig)
    : Person(orig), Gunslinger(orig), Pokerplayer(orig)
    {
    }
    ~BadDude();
    void Set();
    void Show() const;
    void Gdraw() const;
    void Cdraw() const;
 
};
#endif  /* PERSON_HPP */
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
89
90
91
92
93
94
95
96
97
/* 
 * File:   Person.cpp
 * Author: drew
 * 
 * Created on 20 Май 2014 г., 16:09
 */
 
#include <iostream>
#include "Person.hpp"
 
Person::Person(const Person& orig)
{
    nm = orig.nm;
    snm = orig.snm;
}
 
Person::~Person()
{
}
 
void Person::Show() const
{
    std::cout << "nm" << std::endl << "snm" << std::endl;
}
 
void Person::Set()
{
    std::cout << "Enter a name:  ";
    std::cin >> nm;
    std::cout << "Enter a surname:  ";
    std::cin >> snm;
}
 
void Gunslinger::Show() const
{
    Person::Show();
    std::cout << notching << std::endl << readytoshoot << std::endl;
}
 
void Gunslinger::Set()
{
    Person::Set();
    std::cout << "Enter a nothings:  ";
    std::cin >> notching;
    std::cout << "Ready to shoot in:  ";
    std::cin >> readytoshoot;
}
 
void Pokerplayer::Set()
{
    Person::Set();
}
 
void Pokerplayer::Draw() const
{
    std::cout << "Not yet implemented\n";
}
 
void Pokerplayer::Show() const
{
    Person::Show();
    Draw();
}
 
void BadDude::Set()
{
    Gunslinger::Set();
}
 
void BadDude::Gdraw() const
{
    Gunslinger::Draw();
}
 
void BadDude::Cdraw() const
{
    Pokerplayer::Draw();
}
 
void BadDude::Show() const
{
    Person::Show();
    Gunslinger::Data();
    Pokerplayer::Data();
}
 
// ADDITIONAL METHODS
 
void Gunslinger::Data() const
{
    std::cout << notching << std::endl << readytoshoot << std::endl;
}
 
void Pokerplayer::Data() const
{
    Draw();
}

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
#include <iostream>
#include <cstring>
#include "Person.hpp"
const int SIZE = 5;
 
int main()
{
   using std::cin;
   using std::cout;
   using std::endl;
   using std::strchr;
 
   Person * dudes[SIZE];
 
    int ct;
    for (ct = 0; ct < SIZE; ct++)
    {
        char choice;
        cout << "Enter the player type:\n"
            << "g: gunslinger  p: pokerplayer  "
            << "b: baddude  q: quit\n";
        cin >> choice;
        while (strchr("wstq", choice) == NULL)
        {
            cout << "Please enter a g, p, b, or q: ";
            cin >> choice;
        }
        if (choice == 'q')
            break;
        switch(choice)
        {
            case 'g':   dudes[ct] = new Gunslinger;
                        break;
            case 'p':   dudes[ct] = new Pokerplayer;
                        break;
            case 'b':   dudes[ct] = new BadDude;
                        break;
        }
        cin.get();
        //dudes[ct]->Set();
    }
 
    cout << "\nHere is your staff:\n";
    int i;
    for (i = 0; i < ct; i++)
    {
        cout << endl;
        dudes[i]->Show();
    }
    for (i = 0; i < ct; i++)
        delete dudes[i];
    cout << "Bye.\n";
    return 0; 
}
Еще вопрос: почему с int main() { return 0; } все компилируется хорошо?
Помогите, пожалуйста, разобраться.

Добавлено через 6 минут
Отнимать 21, чтобы получилось соответствие с выводом компилятора - это я про номера строк.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru