Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемма с конструктором 
V
    Опции темы
Ak47black
  Дата 3.10.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Здравствуйте.
Народ помогите пожалуйста, застрял на следующем коде
main.cpp
Код

#include "mystack.h"

int main()
{
        DVDStack stack();
        return 0;
}
//---------------------------------------------------------------------------


mystack.cpp
Код

#include<iostream>
#include "mystack.h"
#include "dvd.h"

using namespace std;

void DVDStack::push(DVD val)
{
    v[ top ] = val; 
    top++;    
}

DVD DVDStack::pop()
{
    top--;
    return (v[top]);
}

DVDStack::DVDStack(int i) // Тут у меня вылетает ошибка
{
    top = 0;
}

int DVDStack::full()
{
    return (top >= SIZE);
}

void DVDStack::MyStackPrint()
{
    int i;
    if (top == 0)
       cout << "Stack is empty." << endl;
    else
    {
       cout << "Stack contents: ";
       for (i=0; i<top; i++)
       {
          v[i].print(); 
       }
       cout << endl;
    }
}

mystack.h
Код

/* mystack.h -- Stack declaration and function prototypes:  */
#define SIZE 20
#include "dvd.h"

class DVDStack
{
    DVD v[SIZE];
    int top;
    void push(DVD val);
    DVD pop();
    DVDStack(int i);
    int full();
    void MyStackPrint();
};



Получаю ошибку
Цитата

[C++ Error] mystack.cpp(20): E2279 Cannot find default constructor to initialize member 'DVDStack::v'

в месте
Код

DVDStack::DVDStack(int i)
{

Вродебы всё правильно описал, но всеровно вижу ошибку.

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  temp.rar 1,27 Kb
PM MAIL   Вверх
ISergeyN
Дата 3.10.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 11.10.2008
Где: Україна

Репутация: 2
Всего: 2



Код

class DVDStack
{
public: //! Забыл
    DVD v[SIZE];


Это сообщение отредактировал(а) ISergeyN - 3.10.2009, 16:31
PM MAIL Skype   Вверх
zim22
Дата 3.10.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Ak47black, добавь defalult constructor в класс DVD
Код

...
DVD(string pavadinimas_, string informacija_, int numeris_);
DVD() : numeris(0) {}
...

***
Код

int main()
{
        DVDStack stack(); // !!! это прототип функции, ничего не принимающей и возвращающей DVDStack
        return 0;
}


Это сообщение отредактировал(а) zim22 - 3.10.2009, 16:56


--------------------
PM MAIL   Вверх
Ak47black
Дата 3.10.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Код

DVD() : numeris(0) {}

Вот с этим кодом у меня компилируется.
Но мне тогда непонятно
Почему функция конструктор, не вызывается
Код

DVDStack::DVDStack()
{
    top = 0;
    cout << "Test.";
}

Тоесть вродебы вот этот код
Код

DVDStack stack();

Должен по идее создавать класс при этом вызывая конструктор.
Почему так происходит?  smile 
PM MAIL   Вверх
zim22
Дата 3.10.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Ak47black @  3.10.2009,  19:40 Найти цитируемый пост)
Почему так происходит? 

Цитата(zim22 @  3.10.2009,  16:53 Найти цитируемый пост)
 DVDStack stack(); // !!! это прототип функции, ничего не принимающей и возвращающей DVDStack

Ak47black, объект создаётся так:
Код

DVDStack stack;



--------------------
PM MAIL   Вверх
Ak47black
Дата 3.10.2009, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Фффф теперь у меня ошибка
(С этим кодом)
Код

DVDStack stack;

Цитата

[Linker Error] Unresolved external 'DVD::~DVD()' referenced from D:\...\MAIN.OBJ

А что ему от деструктора надо?  
Главное что когда я его отдельно использовал, он у меня неругался. smile 

Это сообщение отредактировал(а) Ak47black - 3.10.2009, 20:31
PM MAIL   Вверх
zim22
Дата 3.10.2009, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



файл dvd.h
замени                 ~DVD ();
на ~DVD () {}


--------------------
PM MAIL   Вверх
Ak47black
Дата 3.10.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Но теперь будет вызыватся всегда пустая функция.
А как сделать чтобы  вызывалась
Код

DVD::~DVD()

(Тоесть не из {})

И если можно то объясните пожалуйста хоть немного почему при использовании классов в классе получаются такие проблемы.

Это сообщение отредактировал(а) Ak47black - 3.10.2009, 20:42
PM MAIL   Вверх
mes
Дата 3.10.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Ak47black @  3.10.2009,  19:39 Найти цитируемый пост)
Но теперь будет вызыватся всегда пустая функция.
А как сделать чтобы  вызывалась

Чтоб вызывался не-пустой деструктор, напишите любое требуемое тело деструктора внутри скобок smile


Цитата(Ak47black @  3.10.2009,  19:39 Найти цитируемый пост)
И если можно то объясните пожалуйста хоть немного почему при использовании классов в классе получаются такие проблемма. 


Цитата(Ak47black @  3.10.2009,  19:30 Найти цитируемый пост)
Unresolved external 'DVD::~DVD()'

эта ошибка говорит, о том, что  дестуктор объявлен и имеется его вызов, а вызвать нечего, т.е. тело функции не найдено smile



--------------------
PM MAIL WWW   Вверх
Ak47black
Дата 3.10.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



У меня тут следующая проблема всплыла
Есля делаю dvd класс таким
Код

typedef class DVD
{
        private:
                string pavadinimas;
                string informacija;
        public:
                int numeris;
                DVD(string pavadinimas_, string informacija_, int numeris_);
                DVD():numeris(0) {}
                ~DVD(){};
                void print();
} dvd;

И например делаю так
Код

int main()
{
        DVDStack stack;
        for (int i = 0; i++; i<=3)
        {
                DVD *pi = new DVD("n1", "n2", i);
                
        }
        DVD dvd;
        return 0;
}

то получаю
Цитата

[Linker Error] Unresolved external 'DVD::DVD(_STL::basic_string<char, _STL::char_traits<char>, _STL::allocator<char> >, _STL::basic_string<char, _STL::char_traits<char>, _STL::allocator<char> >, int)' referenced from D:\...\MAIN.OBJ

PM MAIL   Вверх
mes
Дата 3.10.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Ak47black @  3.10.2009,  19:57 Найти цитируемый пост)
У меня тут следующая проблема всплыла

если внимательно прочитаете предыдущий пост, то поймете, что ошибка возникает в следствии того, что некая функция не имеет тела, т.е. не определена.
ну а внимательно прочитав сообщение компилятора об ошибке, поймете какая именно функция проблемная. 
 smile  smile 

Это сообщение отредактировал(а) mes - 3.10.2009, 21:09


--------------------
PM MAIL WWW   Вверх
zim22
Дата 3.10.2009, 21:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Ak47black @  3.10.2009,  20:57 Найти цитируемый пост)
   for (int i = 0; i++; i<=3)

жесть
Код

for (int i = 0; i <= 3; ++i)

***
Код

#include "dvd.h"
int main()
{
...


Это сообщение отредактировал(а) zim22 - 3.10.2009, 21:13


--------------------
PM MAIL   Вверх
Ak47black
Дата 3.10.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Цитата

ошибка возникает в следствии того, что некая функция не имеет тела

Функция 
Код

DVD(string pavadinimas_, string informacija_, int numeris_);

определенна в файле dvd.cpp
Поэтому немогу понять.

Код

for (int i = 0; i <= 3; ++i)

Мда тут перегрелся уже smile

Добавлено через 1 минуту и 42 секунды
Код

#include "dvd.h"
int main()
{
...

У меня этот загововок написан.

Это сообщение отредактировал(а) Ak47black - 3.10.2009, 21:17
PM MAIL   Вверх
zim22
Дата 3.10.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



линкуется

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  589.rar 7,37 Kb


--------------------
PM MAIL   Вверх
mes
Дата 3.10.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Ak47black @  3.10.2009,  20:16 Найти цитируемый пост)
определенна в файле dvd.cpp
Поэтому немогу понять.

ну или файл не подключен к проекту, (т.е. невключен в список компиляции), либо сигнатура не совпадает..
если последнее, то покажите определение этой функции.




--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0679 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.