Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Polenoff
2 / 2 / 1
Регистрация: 26.09.2015
Сообщений: 84
#1

Чистая виртуальная функция функция не имеет оператора переопределения - C++

04.10.2015, 15:24. Просмотров 756. Ответов 6
Метки нет (Все метки)

Пишу программу для записи заметок. Есть 2 класса: Page и Note. Note наследуется от Page.

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
Page.h
 
#pragma once
#include"includes.h"
class Page
{   
public:
    vector <Page*> page;
    virtual void print()=0;
    virtual void readf()=0;
    virtual void writef() = 0;
    virtual void fill(vector <Page*>, Page* newpage) = 0;   
};
 
 
Note.h
 
#include"includes.h"
#include"Page.h"
class Note : public Page
{
public:
    virtual void print();
    virtual void readf();
    virtual void writef();
    virtual void fill(vector <Note*>, Note* newnote);
    string note;
};
 
 
Note.cpp
 
 
#include "Note.h"
 
void Note::print()
{
    cout << note<< endl;
}
 
void Note::readf()
{
    ifstream fin("Book.txt");
    getline(fin, note);
    cout << endl << endl << note;
}
void Note::writef()
{
    ofstream fout;
    fout.open("Book.txt", ios::binary);
    getline(cin, note);
    fout << note;
    fout.close();
}
void Note::fill(vector <Note*> arrayofnotes, Note* newnote)
{
    SetConsoleCP(866);
    cout << "Введите заметку:" << endl << endl;
    SetConsoleCP(1251);
    getline(cin, newnote->note);
    arrayofnotes.push_back(newnote);
}
 
 
main.cpp
 
#include "includes.h"
#include "Note.h"
#include "Page.h"
void main()
{
    setlocale(LC_ALL,"Russian");
    
    Note *N = new Note();
    vector<Note *> arrayofnotes;
    N->fill(arrayofnotes,  N);
    N->writef();
}
Ошибка C2259 возникает в main.cpp, не удаётся создать экземпляр класса Note. Дословно ошибка звучит так: "Использование объекта абстрактного типа класса "Note" не допускается:чистая виртуальная функция функция "Page::fill" не имеет оператора переопределения c:\...\main.cpp"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2015, 15:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чистая виртуальная функция функция не имеет оператора переопределения (C++):

Чистая виртуальная функция - C++
Скажите, может ли чистая виртуальная функция иметь тело? В книге написано что может, но не написано как. Пытался сам определить по-разному...

Ошибка "Чистая виртуальная функция" - C++
Собственно проблема: Header.h: interface IParrent{ void chtotoDelat(); }; interface IChild : public IParrent{ //методы...

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B? - C++
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; //Вот главный класс class A{ public: A (){}; class...

Виртуальная функция - C++
Создать производный класс Trapez(равнобокая трапеция). Определить в классе наследнике: -перегруженные функции для изменения сторон ...

виртуальная функция - C++
Вот на форуме увидел тему где приводились в пример виртуальные функции..Что это такое?И чем они различаются от обычных функций?

Виртуальная функция - C++
Всем доброго времени суток! Прошу помочь с одной проблемой. Собственно, вот программа: #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

6
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
04.10.2015, 16:23 #2
тебе нужно переопределить
C++
1
virtual void fill(vector <Page*>, Page* newpage) = 0;
0
Polenoff
2 / 2 / 1
Регистрация: 26.09.2015
Сообщений: 84
04.10.2015, 16:55  [ТС] #3
Как именно это должно выглядеть?
0
zss
Модератор
Эксперт С++
6928 / 6490 / 2182
Регистрация: 18.12.2011
Сообщений: 17,105
Завершенные тесты: 1
04.10.2015, 17:01 #4
C++
1
2
3
4
5
6
void Note::fill(vector <Page*> vp, Page* newpage)
{
   vector<Note *> pvn=dynamic_cast<vector<Note *> >(vp);
   Note* pn=dynamic_cast<Note *>(newpage);
....
}
0
Polenoff
2 / 2 / 1
Регистрация: 26.09.2015
Сообщений: 84
04.10.2015, 17:18  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
void Note::fill(vector <Page*> vectorofpages, Page* newpage)
{
    vector<Note *> arrayofnotes = dynamic_cast<vector<Note *> >(vectorofpages);
    Note* newnote = dynamic_cast<Note *>(newpage);
    SetConsoleCP(866);
    cout << "Введите заметку:" << endl << endl;
    SetConsoleCP(1251);
    getline(cin, newnote->note);
    arrayofnotes.push_back(newnote);
}
Тип dynamic_cast должен являться указателем или ссылкой на тип полного класса или void * c:\...\Note.cpp
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
06.10.2015, 20:14 #6
Polenoff, dynamic_cast поэлементно надо вызывать для вектора
0
Polenoff
2 / 2 / 1
Регистрация: 26.09.2015
Сообщений: 84
06.10.2015, 21:06  [ТС] #7
Как?
0
06.10.2015, 21:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2015, 21:06
Привет! Вот еще темы с ответами:

Виртуальная функция - C++
В учебнике дается понятие абстрактного класса, как класса содержащего хоть одну виртуальную функцию. Проблема в том, что я так и не...

Виртуальная функция - C++
Ругается на метод virtual bool isOveersize() из класса publication. Что не так ? #include &quot;stdafx.h&quot; #include &lt;string&gt; #include...

виртуальная функция - C++
class B { private: int a; int b; public: virtual void show();//есть виртуальная функция,которая выводит a и b } class...

Виртуальная функция - C++
Создайте класс Matematica, определите в нем виртуальную функцию-член matem(int x, int y), которая выводит на экран значения параметров....


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

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

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