Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Амперсанд в типе метода класса: зачем нужен и как он работает? https://www.cyberforum.ru/ cpp-beginners/ thread1836903.html
Здравствуйте. Помогите понять зачем нужен амперсанд в функции-члене класса(double & func();).
C++ Использование функции округления на конкретном примере
Как использовать функцию округления на конкретном примере: #include <iostream> #include <Math.h> using namespace std; int main() { int a, b; float y, z; const float pi = 3.14; cout << "Enter a and b\n"; cin >> a >> b;
C++ Вычисление значения y=sqrt(x) через предел Составить программу вычисляющую значение функции y=sqrt(x) с погрешностью не более 10^-5. Для построения алгоритма вычислений использовать соотношение \lim_{X\rightarrow \propto\ }An=sqrt(x), где последовательность An задается формулой A0=1 ,A(n+1)=(An+X/An)/2 при n>0 в качестве оценки погрешности вычисления предела при n->∞ принять разность между соседними членами последовательности An.... https://www.cyberforum.ru/ cpp-beginners/ thread1836888.html C++ Решить заданное уравнение Добрый день, помогите решить пожалуйста уравнение, пока только осваиваюсь в языке, пробовал его решить, но ответ не выводился. https://www.cyberforum.ru/ cpp-beginners/ thread1836868.html
Напечатать слова, которые отличаются от первого слова C++
Задание звучит так: напечатать слова, которые отличаются от первого слова. Потратила уже уйму времени, но код работает некорректно - первое слово не отображается, но остается на месте, когда встречается в тексте следующий раз. Подскажите, что я делаю не так, ибо сил моих уже не осталось. #include <iostream> #include <conio.h> using namespace std; int main() { char text="apple crunch...
C++ Не работает функция Добрый день. Потихоньку изучаю ООП. И столкнулся с такой проблемой: Есть два файла: 1)#include "BOOK.h" int main() { setlocale(LC_ALL, "Russian"); BOOK::code bc; https://www.cyberforum.ru/ cpp-beginners/ thread1836808.html
C++ Создание метода без класса и аргументов разве нельзя ? https://www.cyberforum.ru/ cpp-beginners/ thread1836787.html
Всем доброго времени суток. А разве нельзя создать обычный метод под main без аргументов типа того Ошибка error C3861: LAB5_1_8: идентификатор не найден Он ругается что в кейсах где методы нету аргументов. =( а мне лень вытаскивать из лаб массив(myArray) и размерность массива(size) в main. И втыкать их в каждый метод ввиде аргумента. void main () { setlocale (LC_ALL, "Russian");
C++ Перевод целых чисел из десятичной системы счисления в другие
вот зробив алгоритм переведення з 10-вої в n систему числення, але біда в тому шо незнаю як написати код на С++, знайшов шось в інеті і відредагував. Але воно не працює плз, допоможіть нубасу. Якщо не важко вкажіть де помилки, а то шось компілятор незрозумів. Язык форума - русский. перевожу: Вот написал алгоритм перевода из 10-ой сс, но беда в том, что не знаю, как написать на С++. Нашел...
C++ В заданной строке вывести все слова по длине попадающие в заданный интервал Помогите. Вывести на экран все слова, которые встречаются в заданном строке и по длине попадают в заданный интервал. #include <iostream> #include <conio.h> #include <math.h> #include <iomanip> #include <ctime> #include <locale> https://www.cyberforum.ru/ cpp-beginners/ thread1836774.html C++ Error LNK2001: неразрешенный внешний символ https://www.cyberforum.ru/ cpp-beginners/ thread1836773.html
Обязательными условиями задачи являются использование своих конструктора и деструктора. Среда программирования Visual Studio 2008. Проблема такая: Если убрать деструктор, код прекрасно компилируется. Если деструктор оставить возникает ошибка на этапе компоновки (error LNK2001: неразрешенный внешний символ) Вот код:
C++ Перевести из 10 в 32 систему счисления
Как перевести с 10 в 32 систему счисления? Видел на одном сайте то там работает.
C++ Посчитать НОК https://www.cyberforum.ru/ cpp-beginners/ thread1836755.html
Требование. Посчитайте НОК чисел второй последовательности. Напишите функции int gcd(int a, int b) и int lcm(int a, int b). Можете также написать фунцкию int lcm(const std::vector<int> & numbers), которая считает НОК всей последовательности. Да, в C++ несколько функций могут иметь одно и то же название, если у них разные количество или типы аргументов. вот код,можете сказать где ошибка #include...
1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 96
0

Использование шаблонов при наследовании, ошибка при компиляции - C++ - Ответ 9700758

28.10.2016, 21:41. Показов 1903. Ответов 6
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
При изучении списков написал шаблон протестировал, все работает. После написал класс наследник от шаблона List.h, компилятор выдает ошибки. Помогите понять причину?
Шаблон списка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef LISTNODE_H_
#define LISTNODE_H_
template <class NODETYPE> class List;
 
template <class NODETYPE>
class ListNode{
    friend class List<NODETYPE>;
public:
    ListNode(const NODETYPE &);
    NODETYPE getData()const;
private:
    NODETYPE data;
    ListNode <NODETYPE> *nextPtr;
};
 
template<class NODETYPE>
ListNode <NODETYPE>::ListNode(const NODETYPE & info): data(info), nextPtr(0){}
 
template <class NODETYPE>
NODETYPE ListNode <NODETYPE>::getData()const{return data;}
#endif /* LISTNODE_H_ */
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef LIST_H_
#define LIST_H_
#include <iostream>
#include <cassert>
#include "ListNode.h"
 
using std::cout;
 
template<class NODETYPE>
class List{
public:
    List();
    ~List();
    void insertAtFront(const NODETYPE &);
    void insertAtBack(const NODETYPE &);
    bool removeFromFront(NODETYPE &);
    bool removeFromBack(NODETYPE &);
    bool isEmpty()const;
    void print()const;
private:
    ListNode <NODETYPE>* firstPtr;
    ListNode <NODETYPE>* lastPtr;
    ListNode <NODETYPE>* getNewNode(const NODETYPE &);
};
//конструктор
template <class NODETYPE>
List<NODETYPE>::List():firstPtr(0),lastPtr(0){}
//деструктор
template<class NODETYPE>
List<NODETYPE>::~List(){
    if(!isEmpty()){
        cout<<"удаление узлов....\n";
    }
    ListNode<NODETYPE> *currentPtr=firstPtr, *tempPtr;
    while(!currentPtr==0){
        tempPtr=currentPtr;
        cout<<currentPtr->data<<"\n";
        currentPtr=currentPtr->nextPtr;
        delete tempPtr;
    }
    cout<<"Все узлы удалены \n\n";
}
 
//вставить узел в начало списка
template <class NODETYPE>
void List<NODETYPE>::insertAtFront(const NODETYPE &value){
    ListNode<NODETYPE>* newPtr=getNewNode(value);
    if(isEmpty()){
        firstPtr=lastPtr=newPtr;
    }
    else{
    newPtr->nextPtr=firstPtr;
    firstPtr=newPtr;
    }
}
//вставить узел в конец списка
template <class NODETYPE>
void List<NODETYPE>::insertAtBack(const NODETYPE & value){
    ListNode<NODETYPE> *newPtr=getNewNode(value);
    if(isEmpty()){
        firstPtr=lastPtr=newPtr;
    }else
    {
        lastPtr->nextPtr=newPtr;
        lastPtr=newPtr;
    }
}
//удаление первого элемента
template<class NODETYPE>
bool List<NODETYPE>::removeFromFront(NODETYPE & value){
    if(isEmpty()){
        return false;
    }
    else{
        ListNode <NODETYPE> *tempPtr=firstPtr;
        if(firstPtr==lastPtr){
            firstPtr=lastPtr=0;
        }
        else{
            firstPtr=firstPtr->nextPtr;
        }
        value=tempPtr->data;
        delete tempPtr;
        return true;
    }
}
//удаление объекта с конца списка
template<class NODETYPE>
bool List<NODETYPE>::removeFromBack(NODETYPE & value){
 
    if(isEmpty()){
        return false;
    }
    else{
        ListNode<NODETYPE> *tempPtr=lastPtr;
        if(firstPtr==lastPtr){
            firstPtr=lastPtr=0;}
        else{
            ListNode<NODETYPE> *currentPtr=firstPtr;
            while(currentPtr->nextPtr!=lastPtr){
                currentPtr=currentPtr->nextPtr;}
                lastPtr=currentPtr;
                lastPtr->nextPtr=0;
            }
        value=tempPtr->data;
        delete tempPtr;
        return true;
    }
}
//создание нового обекта ListNode
template <class NODETYPE>
ListNode<NODETYPE>*List<NODETYPE>::getNewNode(const NODETYPE & value){
    ListNode<NODETYPE> *ptr=new ListNode<NODETYPE>(value);
    assert(ptr!=0);
    return ptr;
}
//проверка пуст ли список
template <class NODETYPE>
bool List<NODETYPE>::isEmpty()const{
    return firstPtr==0;
}
//печать списка
template<class NODETYPE>
void List<NODETYPE>::print()const{
    if(isEmpty()){cout<<"Список пуст \n"; return;}
 
    cout<<"Список элементов списка: \n";
    ListNode<NODETYPE>* tempPtr=firstPtr;
    while(tempPtr!=0){
        cout<<tempPtr->data<<" ";
        tempPtr=tempPtr->nextPtr;
        }
    cout<<"\n\n";
}
#endif /* LIST_H_ */
Шаблон стека.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef STACK_H_
#define STACK_H_
#include "List.h"
template <class STACKTYPE>
 
class Stack : public List<STACKTYPE>{
public:
    void push(const STACKTYPE &d){insertAtFront(d);}
    bool pop(STACKTYPE &d){return removeFromFront(d);}
    bool isStackEmpty()const{return isEmpty();}
    void printStack()const{print();}
};
#endif /* STACK_H_ */
Компилятор выдает следующие ошибки.
21:26:59 **** Incremental Build of configuration Debug for project Spisok ****
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\StartStack.o" "..\\src\\StartStack.cpp"
In file included from ..\src\StartStack.cpp:8:0:
..\src\Stack.h: In member function 'bool Stack<STACKTYPE>::isStackEmpty() const':
..\src\Stack.h:17:42: error: there are no arguments to 'isEmpty' that depend on a template parameter, so a declaration of 'isEmpty' must be available [-fpermissive]
bool isStackEmpty()const{return isEmpty();}
^
..\src\Stack.h:17:42: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
..\src\Stack.h: In member function 'void Stack<STACKTYPE>:rintStack() const':
..\src\Stack.h:18:31: error: there are no arguments to 'print' that depend on a template parameter, so a declaration of 'print' must be available [-fpermissive]
void printStack()const{print();}
^
..\src\Stack.h: In instantiation of 'void Stack<STACKTYPE>:ush(const STACKTYPE&) [with STACKTYPE = int]':
..\src\StartStack.cpp:15:18: required from here
..\src\Stack.h:15:45: error: 'insertAtFront' was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
void push(const STACKTYPE &d){insertAtFront(d);}
~~~~~~~~~~~~~^~~
..\src\Stack.h:15:45: note: declarations in dependent base 'List<int>' are not found by unqualified lookup
..\src\Stack.h:15:45: note: use 'this->insertAtFront' instead
..\src\Stack.h: In instantiation of 'bool Stack<STACKTYPE>:op(STACKTYPE&) [with STACKTYPE = int]':
..\src\StartStack.cpp:19:26: required from here
..\src\Stack.h:16:47: error: 'removeFromFront' was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
bool pop(STACKTYPE &d){return removeFromFront(d);}
~~~~~~~~~~~~~~~^~~
..\src\Stack.h:16:47: note: declarations in dependent base 'List<int>' are not found by unqualified lookup
..\src\Stack.h:16:47: note: use 'this->removeFromFront' instead

Вернуться к обсуждению:
Использование шаблонов при наследовании, ошибка при компиляции C++
0
Заказать работу у эксперта

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2016, 21:41
Готовые ответы и решения:

Ошибка компиляции при наследовании классов
У меня есть класс CNew который наследует класс CTransport но при компиляции выводит ошибку ниже 4...

Ошибки компиляции при наследовании и выводе размера класса
Здравствуйте, представленный ниже код должен в результате своей работы выводит размер классов...

Использование одинаковых имен при наследовании
Здравствуйте, имеется 2 класса: базисный MainStructure и дочерний Entity&lt;T&gt; Проблема в следующем:...

Ошибка при наследовании
Вот такой код: class Figure2 { protected: int Color; int CenterX; int CenterY; public:

6
28.10.2016, 21:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2016, 21:41
Помогаю со студенческими работами здесь

Ошибка при наследовании
Помогите разобраться в следующем: Есть 2 класса Flight и Route, которые реализуют интерфейс...

Ошибка при наследовании
Подскажите пожалуйста почему наследование класса readwrite не работает? //Программа считывает...

Ошибка при наследовании
Имеется архитектура вида: класс &quot;человек&quot;, от него производные &quot;препод&quot; и &quot;член приемной комиссии&quot;....

Ошибка при наследовании
Здраствуйте,не могу понять где именно оштбся,возможно кто-то поможет,код прилагаю //#include...

Ошибка при наследовании
Привет! Ни как не могу разобраться, в чём дело. Создал 2 класса: Base и Derived, где Derived...

Ошибка при наследовании?
Программа компилируется, но консоль не выдает информацию. Связано ли это как то с переполнением...

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