Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Классы, ошибка


Автор: Metalex 6.12.2010, 01:57
Доброго времени суток всем знатокам С++.

У меня есть 2 класса:
Код

class Vector
{
public:
    float x;
    float y;
    
    Vector ()
    {
        x=0; 
        y=0;
    };

    void input ();
    void output ();

    friend Vector operator * (float m, Vector b);
    friend Vector operator + (Vector a, Vector b);
    friend Vector operator - (Vector a, Vector b);
           Vector operator += (Vector b);
           Vector operator = (Vector b);
};


Код

#include "Vector.h"

class Lattice
{
    int n;
public:
    Vector *Basis;
    Vector *GSo_Basis;
    Vector *LLL_redused;

    Lattice ();
    ~Lattice ();
    void SetBasis ();
    void GSo ();
    void LLL ();
    void ShowBasis ();
    void ShowGSo ();
    void ShowLLLredused ();
};


Констуктор второго класса:
Код

Lattice::Lattice ()
{
    cout<<"Введите количество базисных векторов решетки"<<endl;
    cin>>n;
    Vector *Basis = new Vector [n];
    Vector *GSo_Basis = new Vector [n];
    Vector *LLL_redused = new Vector [n];
}


Все компилится отлично, но при выполнении доходит до
Код

void Lattice::SetBasis ()
{
    cout<<"Введите координаты (x, y) каждого вектора"<<endl;
    for (int i=0; i<n; i++)
    {
        Basis[i].input ();     //<<----------------этого места и вылетает.
        LLL_redused[i]=Basis[i];
    }
}


Код

void Vector::input ()
{
    cin>>x>>y;
}


Не могу понять, в чем дело?
Помогите, пожалуйста.

Автор: mes 6.12.2010, 02:01
Цитата(Metalex @  6.12.2010,  00:57 Найти цитируемый пост)
 //<<----------------этого места и вылетает.

покажите как используется класс Lattice в main  ну и на всякий случай деструктор..

Добавлено через 1 минуту и 50 секунд
 smile 
Цитата(Metalex @  6.12.2010,  00:57 Найти цитируемый пост)
    cout<<"Введите количество базисных векторов решетки"<<endl;

юзер-френдли диалоги лучше не делать частью класса, а инициализировать его объект уже нужными данными..

Автор: Metalex 6.12.2010, 02:04
ах, да, может поможет (стек вызовов, проект в 2008 студии):
http://xmages.net/storage/10/1/0/5/b/upload/0d700735.jpg
А также выбивает вот это:
файл xlocnum
Цитата

if (_First == _Last)
    _State |= ios_base::eofbit;
  if (_Ep == _Ac || _Errno != 0)
    _State |= ios_base::failbit;
  else
    _Val = _Ans;    // deliver value   //<<------------тут стрелочка
  return (_First);
  }


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

Lattice::~Lattice ()
{    
    delete [] Basis;
    delete [] GSo_Basis;
    delete [] LLL_redused;
}


Код

int main ()
{
    setlocale(LC_ALL, "Russian");

    Lattice lattice;
    lattice.SetBasis ();
    lattice.GSo ();
    lattice.LLL ();
    lattice.ShowBasis ();
    lattice.ShowGSo ();
    lattice.ShowLLLredused ();

    system ("Pause");
    return 0;
}



Цитата(mes @  6.12.2010,  02:01 Найти цитируемый пост)
юзер-френдли диалоги лучше не делать частью класса, а инициализировать его объект уже нужными данными..

спасибо, учту!

Автор: mes 6.12.2010, 02:13
Цитата(Metalex @  6.12.2010,  01:04 Найти цитируемый пост)
А также выбивает вот это:

ну так а какие данные вводите ? Вам можно только числа... smile

Автор: Metalex 6.12.2010, 02:15
Цитата(mes @  6.12.2010,  02:13 Найти цитируемый пост)
Вам можно только числа

в том и дело, что только числа и ввожу!!

Автор: mes 6.12.2010, 02:26
а если убрать русскую локаль ?

Автор: Metalex 6.12.2010, 02:28
Попробовал. Не помогло.

Автор: mes 6.12.2010, 02:32
Цитата(mes @  6.12.2010,  01:26 Найти цитируемый пост)
а если убрать русскую локаль ? 

хотя нет..у вас в стеке используется do_get.. значит локаль уже не причем.. 
остается ввод данных.. 
попробуйте для теста своих данных так :
Код

int main ()
{
   float x,y;
   for (size_t i=0; ..)
     std::cin >>x>>y; 
}

Автор: Metalex 6.12.2010, 02:36
в мэйне ввод работает корректно..

Добавлено через 11 минут и 28 секунд
попробовал в мэйне так:
Код

int main ()
{
    setlocale(LC_ALL, "Russian");

    Lattice lattice;
    lattice.Basis[0].input();
}

не работает..

Автор: mes 6.12.2010, 02:48
Цитата(Metalex @  6.12.2010,  01:36 Найти цитируемый пост)
в мэйне ввод работает корректно.. 

тогда Вы чего то утаили..  smile 

Автор: Metalex 6.12.2010, 02:50
mes, я в предыдущий пост ответ добавил smile

Автор: mes 6.12.2010, 02:50
мм..а откуда на скрине time_get ? где Вы работаете с датой ?

Автор: Metalex 6.12.2010, 02:50
и в помине не было..

Автор: Metalex 7.12.2010, 01:06
никто не подскажет? smile 

Автор: sentry 7.12.2010, 01:28
Код

Vector *Basis = new Vector [n];
Vector *GSo_Basis = new Vector [n];
Vector *LLL_redused = new Vector [n];

Мне кажется, или тут вы присваиваете значения локальным переменным, а не данным-членам класса?  smile  smile 

Автор: Metalex 7.12.2010, 02:44
sentry, спасибо огромное!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)