Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 24.02.2015
Сообщений: 18
1

Как получить доступ к методам класса, который содержится в векторе класса

13.06.2015, 18:31. Показов 881. Ответов 4
Метки нет (Все метки)

Пишу дерево с любым количеством наследников. В классе Thread содержится вектор классов Thread. При попытке просмотра первого элемента в векторе, нет доступа к методам класса. Подскажите пожалуйста, что нужно исправить чтобы получить доступ к методам?

C++
1
2
3
4
5
6
7
8
...
class Thread
{
private:
    int *key=nullptr;
    vector<Thread> *left=nullptr;
...
 void show_ar_L(){cout<<left[0]<<endl;} // <-- Методов класса нет
Ниже представлен код класса, и ниже код всей программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Thread
{
private:
    int *key=nullptr;
    vector<Thread> *left=nullptr;
    vector<Thread> *right=nullptr;
public:
    Thread(){key=new int(-1);left=new  vector<Thread>;right==new  vector<Thread>;}
    Thread(const int &x){key=new int(x);left=new  vector<Thread>;right==new  vector<Thread>;}
    Thread(const Thread *t){key=t->key;left=t->left;right=t->right;}
    void show_ar_L(){cout<<left[0]<<endl;}//cout<<<<endl;}
    int getX()const{return *key;}
    int & getX(){return *key;}
    void add(Thread *t){Thread *temp=new Thread(t);t->left->push_back(temp);}//delete temp
    operator=(Thread *t){key=t->key;left=t->left;right=t->right;}
    friend ostream & operator<<(ostream & os, const Thread * t){os<<t->getX();return os;}
};
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
#include <iostream>
#include <stack>
#include <fstream>
#include <map>
#include <memory>
#include <vector>
#include <algorithm>
using namespace std;
void showmap(const multimap<int,int> &a);
 
class Thread
{
private:
    int *key=nullptr;
    vector<Thread> *left=nullptr;
    vector<Thread> *right=nullptr;
public:
    Thread(){key=new int(-1);left=new  vector<Thread>;right==new  vector<Thread>;}
    Thread(const int &x){key=new int(x);left=new  vector<Thread>;right==new  vector<Thread>;}
    //Thread(const int &x,const int &n){key=new int(x);left=new vector<Thread>(n);right==new  vector<Thread>(n);}
    Thread(const Thread *t){key=t->key;left=t->left;right=t->right;}
    //void show_ar(){cout<<(void *)this<<" "<<*key<<" "<<(void *)left<<" "<<endl;}
    void show_ar_L(){cout<<left[0]<<endl;}//cout<<<<endl;}
    int getX()const{return *key;}
    int & getX(){return *key;}
    void add(Thread *t){Thread *temp=new Thread(t);t->left->push_back(temp);}//delete temp
    operator=(Thread *t){key=t->key;left=t->left;right=t->right;}
    friend ostream & operator<<(ostream & os, const Thread * t){os<<t->getX();return os;}
};
 
int main()
{
    fstream nfile;
    nfile.open("treads2.txt");
    int n;
    nfile>>n;
    multimap <int,int>one;
    for(int i=0;i<n;++i)
    {
        int x;
        int y;
        nfile>>x;
        nfile>>y;
        one.insert(pair<int,int>(x,y));
    }
 
 
    Thread *a = new Thread();
    a->getX()=2;
    Thread *b = new Thread();
    b->getX()=1;
    cout<<a->getX()<<endl;
    cout<<b->getX()<<endl;
    a->add(b);
    cout<<a->getX();
    b->getX()=4;
    cout<<b;
    cout<<a;
 
 
 
 
}
void showmap(const multimap<int,int> &a)
{
    for(auto it=a.begin();it!=a.end();++it)cout<<it->first<<" "<<it->second<<endl;
}
1

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2015, 18:31
Ответы с готовыми решениями:

Как считать файлы в вектор, который содержится в объекте пользовательского класса?
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;fstream&gt; using namespace std;...

Доступ к методам производного класса
Есть базовый класс CJobGeneral. В нём описано несколько методов. Есть унаследованный от него...

Доступ к методам класса без создания объекта
Почему доступны методы foo() и bar() класса А, если нет ни одного объекта это класса? #include...

Доступ к открытым методам базового класса при частном наследовании
Всем, привет, возникла проблема. Есть классы 1-&gt;2-&gt;3. Класс 2 явл наследником 1, а 3 класс является...

4
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.06.2015, 18:48 2
C++
1
void show_ar_L(){cout<<(*left)[0]<<endl;}
Всё остальное надо тоже переписать
1
1 / 1 / 0
Регистрация: 24.02.2015
Сообщений: 18
13.06.2015, 19:04  [ТС] 3
Попробовал так, вылетела ошибка
C++
1
void show_ar_L(){cout<<(*left)[0].getX()<<endl;}
Можешь пожалуйста немного подробней объяснить?
Как и мне правильно добавить указать метод getX()?
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
13.06.2015, 19:55 4
Цитата Сообщение от Disabled7 Посмотреть сообщение
Как и мне правильно добавить указать метод getX()?
Что?
0
1 / 1 / 0
Регистрация: 24.02.2015
Сообщений: 18
13.06.2015, 20:12  [ТС] 5
Цитата Сообщение от Tulosba Посмотреть сообщение
Сообщение от Disabled7
Как и мне правильно добавить указать метод getX()?
Что?
________
Хотел сказать как и где правильно указать метод getX()? для (*left)[0]
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2015, 20:12

Обращение к методам класса через указатель на экземпляр класса
Добрый день. Не могу осилить проблему: Описан абстрактный класс. Описаны наследники этого...

Callback std::function + доступ к приватным полям класса методам которые не есть их полями
Проблема, товарищи. В прикрепленном архиве 3 файла, из которых состоит моя программа: **main.cpp;...

Как получить доступ к членам класса из функций
Есть код типа //*****************************************************************************...

Как получить доступ в private из дочернего класса?
Привет :) Изучаю наследование. Столкнулся с такой проблемой. Написал класс &quot;Figure&quot; и создал...


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

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

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