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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Class matrix, Что-то с конструктором, Help 
:(
    Опции темы
FTK
Дата 12.12.2005, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Hello World!!!

Помогите кто-нибудь, такая проблема:
есть класс matrix

Код

class matrix
{
double **A;
int size;
public:
matrix (){A=0} //Типа конструктор умолчания
 matrix(double &a)     // Конструктор, который должен создать квадратную матрицу аxa 
   {    int size=a;  //и заполнить ее значениями а
       A=new double*[size];
        for(int k=0;k!=size;++k)A[k]=new double[size];
        for(int i=0;i!=size;++i)for(int j=0;j!=size;++j)A[i][j]=a;
   }
}


Далее в програмке идет создание объекта matrix

Код

double q=2; matrix bad(q); 
// Или так
matrix bad();


И на этом моменте програмка останавливается.
Кто-нибудь может подсказать, в чем проблема?
PM MAIL   Вверх
Neitron
Дата 12.12.2005, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Первое что бросается в глаза это отсутсвие точки с запятой в конструкторе по умолчанию.
Код

int size=a;

Приравнивашь инту доубль.


Это сообщение отредактировал(а) Neitron - 12.12.2005, 14:17


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
pablo
Дата 12.12.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



Во первых: Конвертация из double в int, это никчему хорошему не приведёт, далее, что говорит программа или отладчик при остановке ?


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
FTK
Дата 12.12.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На самом деле, даже если просто написать
Код

int size=2; //Чтоб квадратную создал.....

И поставив ; после конструктора по умолчанию, не работает.
Программа останавливается, ничего не говорит, на клаву не реагирует. (Консоль до этой строчки выводит все нормально, и потом стоп.)

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



Код

#include <iostream>
#include <new>

using namespace std;

class matrix
{
double **A;
int size;
public:
matrix (){A=0;} //Òèïà êîíñòðóêòîð óìîë÷àíèÿ
 matrix(const int &a)     // Êîíñòðóêòîð, êîòîðûé äîëæåí ñîçäàòü êâàäðàòíóþ ìàòðèöó àxa 
   {    int size=a;  //è çàïîëíèòü åå çíà÷åíèÿìè à
       A=new double*[size];
        for(int k=0;k!=size;++k)A[k]=new double[size];
        for(int i=0;i!=size;++i)for(int j=0;j!=size;++j)A[i][j]=a;
   }
};

int main()
{
    matrix a(2);
    return 0;
}


всё компилится и работает на 6 вижуал студии


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
FTK
Дата 12.12.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня тож 6 студия.
Но работать не хочет.
Отладчик тоже при подходе к этой строке останавливается, ошибок не пишет, матрицу не создает, на f11 и f10
не реагирует....
PM MAIL   Вверх
pablo
Дата 12.12.2005, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



Код

#include <iostream>
#include <new>

using namespace std;

class matrix
{
    double **A;
    int size;
public:
    matrix (){A=0;} 
    matrix(const int &a)      
    {
        int size = a;
        
        A = new double*[size];

        for(int k = 0; k!=size; ++k)
            A[k] = new double[size];

        for(int i = 0;i != size; ++i)
        {
            for(int j=0;j != size ;++j)
            {
                A[i][j]=a;
                cout << A[i][j];
            }
            cout << endl;
        }
    }
};
int main()
{
    matrix a(10);
    matrix b;
    
    return 0;
}


Запусти увидиш вывод: матрица 10х10 с цифрами 10, всё 100% работает


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
FTK
Дата 12.12.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



pablo
Спасибо за помощь, но это я тут стормозил.
Проблема-то не в конструкторе...
Код

matrix compute(char *in, int &a)
    { 
                    if(!A.readf(in)) 
        {
                                cout<<"Incorrect file"<<endl;
         matrix X(0);
         return  X;
        } 
                               //И там дальше не важно что


Он создает матрицу X(0), потом, перейдя к return, он вызывает конструктор копирования, неизвестно почему.
И на этом он и повисает. Сможешь помочь? smile

Добавлено @ 19:47
Да, и еще, кто нибудь знает, что это за ошибка?

"CXX0030: Error: expression cannot be evaluated"

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


Новичок



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

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



Кто-нибудь знает, почему return может вызывать конструктор копирования??? smile
PM MAIL   Вверх
blackofe
Дата 12.12.2005, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(FTK @ 12.12.2005, 21:24)
Кто-нибудь знает, почему return может вызывать конструктор копирования??? smile

потому что ты создаешь новый объект из имеющегося. X - локальная переменная для функции compute() и будет уничтожена при выходе из области видимости (в нашем случае - из тела функции). чтобы функция вернула значение, значение переменной X копируется и возвращается. сама переменная X, как я уже сказал, при это помирает.
Добавлено @ 22:42
в дополнение к pablo я бы озаботился деструктором. в имплементации такая куча new и ни одного delete. как-то это неаккуратненько ;).

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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