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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к методам класса вектора с классами, Получение методом класса, в векторе 
:(
    Опции темы
Disabled7
Дата 14.6.2015, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

...
class Thread
{
private:
    int *key=nullptr;
    vector<Thread> *left=nullptr;
...
 void show_ar_L(){cout<<left[0]<<endl;} // <-- Методов класса нет


Советовали сделать так, но не выходит( вылетает ошибка)
Код

void show_ar_L(){cout<<(*left)[0].getX()<<endl;}


Ниже прикладываю код класса и еще ниже код всей программы 
Код

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;}
};


Код

#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;
}

PM MAIL   Вверх
xvr
Дата 15.6.2015, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Вы С++ с Java не перепутали? Зачем указатели в таких количествах?
Код

    int *key=nullptr;
    vector<Thread> *left=nullptr;
    vector<Thread> *right=nullptr;

Уберите их (сделайте так -
Код

    int key=-1;
    vector<Thread> left;
    vector<Thread> right;
) и 'доступ к методам' появится

Цитата(Disabled7 @  14.6.2015,  09:34 Найти цитируемый пост)
Советовали сделать так, но не выходит( вылетает ошибка)
Код

void show_ar_L(){cout<<(*left)[0].getX()<<endl;}

А вот это странно - должно работать. Какая ошибка вылетает?

PM MAIL   Вверх
borisbn
Дата 15.6.2015, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



И ещё: у Вас крайне странный
Код
operator=(Thread *t)...

Во-первых он должен возвращать значение, во-вторых, по-хорошему, он должен принимать константную ссылку на  Thread. Ну, а в третьих, Вы копируете указатели из переданного t в свои. Я не знаю логики Вашего дерева, но мне кажется, что что-то здесь неправильно.


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

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

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

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

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


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

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


 




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


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

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