Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37

Ошибка при компиляции

16.01.2012, 00:05. Показов 2106. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <class Data> List <Data>::~List()
{
    if (pbeg !=0)
    {
        Node *pv = pbeg;
        while (pv)
        {
            pv=pv->next;
            delete pbeg;
            pbeg=pv;
        }
    }
}
это деструктор, ругается на строчку pv=pv->next;
pv=pv->next; это проход по односвязному списку до конца

сама ошибка:
instantiated from `List<Data>::~List() [with Data = Matr]'
instantiated from here
C++
1
List <Matr> L;
default argument for parameter of type `Matr' has type `int'

Сам конструктор:
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
template <class Data> class List
{
    class Node
    {
        public:
            Data d;
            Node *next, *prev;
            Node(Data dat = 0){d = dat; next = 0; prev = 0;}
    };
    Node *pbeg, *pend;
    public:
        List();
        ~List();
        void add(Data d);
        Node * find(Data i) {
                     Node *pv = pbeg;
                     while (pv)
                      {
                         if(pv->d == i)break;
                         pv = pv->next;
                      }
                      return pv;
        }
        Node * insert(Data key, Data d)
        {
            Node *pkey = find(key);
            if(!pkey)
            {
               Node *pv=new Node(d);
                pv->next=pkey->next;
                pv->prev=pkey;
                pkey->next=pv;
                if (pkey!= pend)(pv->next)->prev = pv; else pend=pv;
                 return pv;
              }
             return 0;
        };
        bool remove(Data key);
        void print();
        void print_back();
};
 Комментарий модератора 
Слова "помогите","плз", "горю","отчислят","срочно" в названии темы только отбивают желание ее смотреть. Кратко опишите суть проблемы,а не причины ее возникновения.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2012, 00:05
Ответы с готовыми решениями:

Ошибка при компиляции. Где ошибка? (Работа с классом)
Уважаемые форумчане! При компиляции проекта возникает ошибка &quot; undefined reference to `MeterNZiF::MeterNZiF()' &quot; на 7 строку...

Ошибка памяти при выполнении, при компиляции не выводит ошибки
ПОмогите плс программа вводит строку символов до точки, а после вычисляет процент согласных в этой строке и выводит их в обратном порядке....

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы
В VS скомпилировал код #include &lt;iostream&gt; using namespace std; int main() { int a; cout&lt;&lt;&quot;Hallo&quot;; cin&gt;&gt;a; ...

21
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 00:11
потому что здесь
C++
1
Node(Data dat = 0){d = dat; next = 0; prev = 0;}
обьекту типа Matr присваивается 0. допустимо?
для сравнения:
C++
1
Node(Data dat = Data()) d(dat), next(), prev() { }
1
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37
16.01.2012, 00:57  [ТС]
Да ты прав, спасибо!

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

Вот коды функций, мб помогут..

C++
1
2
3
4
5
6
7
8
9
10
11
template <class Data> void List <Data>::print()
{
    Node *pv = pbeg;
    cout<<endl<<"list: ";
    while (pv)
    {
        cout << pv->d << ' ';
        pv = pv->next;
    }
    cout<<endl;
}
C++
1
2
3
4
5
6
7
8
9
10
11
template <class Data> void List <Data>::add(Data d)
{
    Node *pv = new Node(d);
    if (pbeg == 0)pbeg = pend = pv;
    else
    {
        pv->prev = pend;
        pend->next = pv;
        pend = pv;
    }
}
Вызов:

L.add(Mm);
L.print();

Mm - матрица
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 01:01
как у тебя для матрицы типа Matr реализован конструктор копирования/оператор присваивания?
и раз уж у тебя хранятся матрицы (большие обьекты), а не объекты встроенных типов,
то перепиши конструктор для Node, чтоб была передача по ссылке.
что то вроде этого:
C++
1
2
Node() d(Data()), next(), prev() { }
Node(const Data& dat) d(dat), next(), prev() { }
1
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37
16.01.2012, 01:02  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Matr(const Matr &obj)
       {
            N = obj.N;
            M = obj.M;
            CL = new List1;
            int one=0;
            for(int i = 0; i < N;i++)
                for(int j = 0; j < M;j++)
                {
                    one=obj.Get(i,j);
                    Add(i, j, one);
                }
        }
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 01:12
давай тогда свой Add)
и поподробнее пр CL и List1
1
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37
16.01.2012, 01:15  [ТС]
C++
1
2
3
4
5
6
void Matr::Add(int i, int j, int value)
{
     if (i >= N && j >= M)
        return;
     CL->Add(i, j, value);
}
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 List1 
{
     struct Elem 
     {
        int x;
        int y;
        int v;
        Elem *next;
      }; 
      
private:
   
   Elem *head, *end;
   int Find(int i, int j);
 
public:
   List1();
   ~List1();
   void Add(int i, int j, int value);
   void Remove(int i, int j);
   int Get(int i, int j);
   void Clear();
};
 
class Matr 
{
private:
       List1 *CL;
 
public:
       Matr();
       Matr(int _N, int _M);
       Matr(const Matr &obj)
       {
            N = obj.N;
            M = obj.M;
            CL = new List1;
            int one=0;
            for(int i = 0; i < N;i++)
                for(int j = 0; j < M;j++)
                {
                    one=obj.Get(i,j);
                    Add(i, j, one);
                }
        }     
       ~Matr();
вот)
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 01:22
в коде
C++
1
2
3
4
5
6
void Matr::Add(int i, int j, int value)
{
     if (i >= N && j >= M)
        return;
     CL->Add(i, j, value);
}
вместо && поставь ||, но это не решит твою проблему)
давай следущий Add ... и последущий, если есть)

Добавлено через 2 минуты
и еще operator << для Matr
надеюсь для
C++
1
cout << pv->d << ' ';
он реализован?
1
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37
16.01.2012, 01:37  [ТС]
да)
C++
1
2
3
4
5
6
7
8
9
10
11
12
ostream & operator << (ostream &output, Matr &m)
{
    for(int i=0; i<m.N; i++)
    {
        for(int j=0; j<m.M; j++)
        {
            output<<m.Get(i,j);
        }
    output<<endl;
    }
    return output;
}
Добавлено через 1 минуту
еще Add
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
void List1::Add(int i, int j, int value)
{
    kol_elem++;
    if (head == 0)
    {
        int q=2;
         Elem *it = new Elem;
         it->next = it;
         it->x = i;
         it->y = j;
         it->v = value;
         head = end = it;
    }
    else
    {
      Elem *it = new Elem;
      it->x = i;
      it->y = j;
      it->v = value;
      it->next = head;
      end->next = it;
      end = it;
   }
}
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 01:48
похоже ты уже все переделал?
и что не работает?
0
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37
16.01.2012, 01:55  [ТС]
нет, я отладкой все прогоняю но по прежнему нули выводятся...
хочешь пришлю полностью лабу, попробуешь, если время есть?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 01:57
давай
1
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37
16.01.2012, 02:00  [ТС]
http://zalil.ru/32505892 спасибо!
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 02:34
все же правильно работает в том, что ты прислал(после изменений некоторых синтаксич ошибок)
просто ты сам неправильно применяешь то, что написал:
зачем ты добавляешь в матрицу, которая уже имеет м*н элементов?

Добавлено через 1 минуту
вот это работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
    Matr Mm(N1, M1);
    for(int i = 0; i < N1; ++i)
    {
        for(int j = 0; j < M1; ++j)
        {
            int elem;
            cin >> elem;
            Mm.Add(i,j,elem);
        }
    }
 
    //это типо работа с шаблоном
    L.add(Mm);
    L.print();
0
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37
16.01.2012, 02:42  [ТС]
это разреженная матрица, вот этим

C++
1
2
3
4
5
6
7
for (int i=0;i<N1;i++)
        for(int j=0;j<M1;j++)
        {
 
            Mm.Add(i, j, zn);
            zn+=2;
        }
я задаю координаты и значение элементов этой матрицы

Добавлено через 3 минуты
То есть она у тебя заработала? list: не выводит нули больше?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 02:48
но что именно не работает?
я сколько не запускаю для
C++
1
2
3
4
    L.add(Mm);
    L.add(MM);
    L.print();
    L.print_back();
все выдает верно

Добавлено через 53 секунды
никаких нулей, разве что я сам ввожу в матрицу 0
0
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37
16.01.2012, 02:52  [ТС]
Пришли мне ее
У меня по прежнему одни нули выводит L.print();
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 02:56
http://zalil.ru/32506081без файлов проекта, т.к. иде не девс++
1
0 / 0 / 1
Регистрация: 14.01.2012
Сообщений: 37
16.01.2012, 02:59  [ТС]
ееееее заработало)
Спасибо тебе)
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.01.2012, 03:00
если какие траблы могу завтра посмотреть(если еще нужно будет) просто разбирать нечитабельный(уж извини)) код в это время суток не ок
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2012, 03:00
Помогаю со студенческими работами здесь

Использование шаблонов при наследовании, ошибка при компиляции
При изучении списков написал шаблон протестировал, все работает. После написал класс наследник от шаблона List.h, компилятор выдает...

При компиляции ошибка. Ошибка c++ C2678
Ошибка c++ C2678 #include &lt;windows.h&gt; #include &lt;string&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; #include...

Ошибка при компиляции
Пишу первую игру на c++ в vs 2013. Появилась такая проблема. Есть 4 файла: main.cpp #include &lt;SFML\Graphics.hpp&gt; ...

Ошибка при компиляции
Доброго времени суток, уважаемые пользователи cyberforum.ru! Подскажите пожалуйста как, зафиксить ошибку? if...

Ошибка при компиляции.
Всем привет! Начал изучать C++ по книжке, но частенько натыкаюсь в ней на ошибки. Пишу в Visual Studio 2008. Программка не...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru