Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Роман2707
1 / 1 / 1
Регистрация: 05.05.2011
Сообщений: 15
1

Статические функции: добавления указателя (типа AbstractClass) на объект данного класса

30.05.2015, 09:09. Просмотров 439. Ответов 3
Метки нет (Все метки)

Здравствуйте!
Не так давно начал изучать C++, препод дал такое задание:

Часть 1. Разработка абстрактного класса.
....
Часть 2. Разработайте производный класс (согласно варианту задания по работам №1, №2), осуществив его наследование от разработанного абстрактного класса, с реализацией всех чисто виртуальных функций.
....
На втором этапе мы реализуем механизм хранения. Добавляем в призводный класс:

1) Static ДИНАМИЧЕСКИЙ массив указателей на объекты БАЗОВОГО (абстрактного) класса.

2) Статические переменные для хранения размера массива и числа заполненных ячеек.

3) Статические функции:

-добавления указателя (типа AbstractTime) на объект данного класса.

-удаление элемента с заданным номером

-обход всего массива с вызовом функции Print (вывод на экран).
....

Вот что я успел навоять:
1)Головной файл абстрактного класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER1_H
#define HEADER1_H
 
class abs_values
{
 
 
public:
 
    
 virtual void Set_value()=0; //Занести значения в объект
 virtual void Print_in_Value()=0;//Показать общий вид значения
 virtual void Print_Z()=0;//Показать модуль числа
 virtual  void Print_F()=0;//Показать аргумент числа
 
};
#endif
2)Головной файл производного класса
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
#include "abstract.h"
#ifndef HEADER2_H
#define HEADER2_H
 
class imaginary:public abs_values
    { 
 static int Count;
 double Im_z;
 double Re_z;
 double Z;
 double F;
 
 static int mas;
 static int fil;
 static abs_values * img_mas[3];
 //abs_values * img_mas[3];
 
 
 public:
 imaginary();//конструктор по умолчанию
 imaginary(double rez,double imz);//конструктор с параметрами
 imaginary(imaginary &obg);//конструктор копирования
 ~imaginary();
 imaginary * GetThis();
 void Set_value(); //Занести значения в объект
 void Print_in_Value();//Показать общий вид значения
 void Print_Z();//Показать модуль числа
 void Print_F();//Показать аргумент числа
 double find_Z();//Расчитать модуль числа
 double find_F();//Расчитать аргумент числа
 static int Get_count();//Счетчик объектов
 static public bool Add();
 
};
#endif
3) Файл методов
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
#include"imaginary.h"
#include <iostream>
#include "math.h"
 
using namespace std;
int imaginary::Count=0;
int imaginary::mas=0;
int imaginary::fil=0;
 
...
//реализация методов
...
 
bool imaginary::Add(abs_values * p)
{
    
    if (mas+1 < 3)
    {
        //img_mas = new imaginary();
        img_mas[mas] = new imaginary();
    //p = new imaginary[mas];
    mas++;
    return true;
    }
    else
        return false;
}
Предпологается что данные будут храниться в статической области памяти внутри класса.
Заполнение происходит статической функцией Add
При попытки скомпилировать данный код, выдает 2 ошибки:

error LNK2001: unresolved external symbol "private: static class abs_values * * imaginary::img_mas" (?img_mas@imaginary@@0PAPAVabs_values@@A)

fatal error LNK1120: 1 unresolved externals

Вопрос: подскажите пожалуйста в чем проблема?

если функцию объявляю не статично и указатель на класс тоже, то ошибки нет.
abs_values * img_mas[3];
bool Add();
но мне то надо в стате.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2015, 09:09
Ответы с готовыми решениями:

Создание указателя типа базового класса на экземпляр производного класса
Добрый день! Иногда видел коды, где создавался указатель типа базового класса...

Удаление указателя на объект класса
Что-то ни как не могу разобраться, где у меня ошибка?! Ниже приведен фрагмент...

Указатель на объект из указателя на член класса
Что как-то сей вопрос ставит меня в тупик. class A { int i; } obj; ...

Возврат указателя на внутренний объект класса
Добрый день! Имеется следующая структура: class A{}; class B :...

Объясните объявление указателя на объект класса
Доброго времени суток! Подскажите, пожалуйста, что означает данная строчка?...

3
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
30.05.2015, 09:50 2
Нет определения static abs_values * img_mas[3] (в файле методов).

Добавлено через 16 минут
Цитата Сообщение от Роман2707 Посмотреть сообщение
static public bool Add();
...
C++
1
static bool Add();
Реализация Add() не соответствует прототипу.
1
Роман2707
1 / 1 / 1
Регистрация: 05.05.2011
Сообщений: 15
30.05.2015, 10:37  [ТС] 3
А, точно, добавил в методы
C++
1
abs_values * imaginary::img_mas[3]={NULL,NULL,NULL};
Добавлено через 45 минут
Цитата Сообщение от lss Посмотреть сообщение
Реализация Add() не соответствует прототипу.
поясните пожалуйста, почему не соответствует?
это связанно с public?
Просто в приложении к данной лабораторной работе в примере
написано использовать следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Time : public AbstractTime
 
{
…………..
static AbstractTime ** Array; //указатели БАЗОВОГО типа
 
………
 
static public bool Add(AbstractTime *);
 
……………….
 
};
…..
 
AbstractTime * p = new Time(); //создаем объект ПРОИЗВОДНОГО типа
 
…..
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
30.05.2015, 11:22 4
Цитата Сообщение от Роман2707 Посмотреть сообщение
это связанно с public?
Нет, public тут вообще не к месту (что-то из Java).
Прототип такой:
C++
1
static bool Add();
Реализация такая:
C++
1
2
bool imaginary::Add(abs_values * p)
{
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2015, 11:22

Передача указателя в класс на объект другого класса
Не могу передать ссылку на объект класса в другой класс main.cpp #include...

Использование указателя на объект шаблонного класса в шаблонном классе.
Всем привет! Мне нужно реализовать граф. Начал с вершин и ребер, причем и...

Зачем для указателя на объект класса создается отдельный класс
Читаю книгу Джефа Элджера &quot;Библиотека программиста С++&quot;, там в главе про умные...


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

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

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