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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> конструктор матриц, ошибка при создании класса матриц 
:(
    Опции темы
votan6442
Дата 1.4.2014, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



При создании объектов класса для нахождения разности( матриц a, b, c) возникает ошибка: error C2512: Matrix: нет подходящего конструктора по умолчанию..Подскажите пожалуйста, что нужно сделать, всю голову сломал..

Код

#include<conio.h>
#include<iostream>
#include<cstdio>
#include <math.h>
using namespace std;

 
class Matrix{

     friend Matrix operator * (Matrix, Matrix);

     private:
        int n;
        
        float **a;
        Matrix(int n){        
a = new float*[n];                                    
for(int i= 0; i < n; i++) 
a[i] = new float[n];                                     

        }


   

    public:
    void SetMatrix(){
        
    int i,j;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            cin>>a[i][j];
}
    
    
    void GetMatrix(){
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
}

    void SetSize(int size){
        
    n=size;}
    
   
    Matrix operator-(const Matrix &rhs){
      Matrix result(*this);
      for (int i = 0; i <n; i++)
        for (int j = 0; j <n; j++)
            result.a[i][j] = a[i][j] - rhs.a[i][j];
return result;
    }

   
  ~Matrix();
};


int main(void){
    cout<< " enter the n: " << endl;
    Matrix a;
    
    Matrix b;
    Matrix c;

    int size;
    cin>>size;
    cout <<"enter the mat 1" <<endl ;
    a.SetSize(size);
     
    b.SetSize(size);
     cout <<"enter the mat 2" <<endl ;
    a.SetMatrix();
    b.SetMatrix();
   
    cout<<"Differense:"<<endl;
    c=a-b;
    c.GetMatrix();
    system(" PAUSE ");
     
return 0;
}

PM MAIL   Вверх
Guinness
Дата 1.4.2014, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

Matrix a;
Matrix b;
Matrix c;

Здесь ты создаешь матрицы с помощью конструктора по умолчанию. Хотя в классе объявлен только такой конструктор, причем в приватной области:
Код

Matrix(int n)
{        
        a = new float*[n];                                    
        for(int i= 0; i < n; i++) 
        a[i] = new float[n];                                     
}

И ещё рекомендую подумать над функцией SetSize. К примеру, изначально была матрица размерности 3х3, потом делаем SetSize(100) -> по идее должна получиться матрица 100х100. Вопрос, получится ли она? 
PM MAIL   Вверх
votan6442
Дата 2.4.2014, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



это мой первый класс, и я вот не пойму, как обращаться в mainу к конструктору ?
PM MAIL   Вверх
Guinness
Дата 3.4.2014, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(votan6442 @  3.4.2014,  00:55 Найти цитируемый пост)
это мой первый класс, и я вот не пойму, как обращаться в mainу к конструктору ? 

Честно говоря, не очень понял вопрос, но попробую ответить.
Код

class A
{
public:
    A();
    A(int a);
    A(int a, char b);

    // какой-то ещё код
    ...............
private:
    int m_a;
    char m_b;
};

A::A() :
    m_a(0),
    m_b('z')
{
}

A::A(int a) :
    m_a(a),
    m_b('z')
{
}
A::A(int a, char b) :
    m_a(a),
    m_b(b)
{
}

int main()
{
    A a1;                    // конструктор по умолчанию
    A a2(12);             // конструктор A(int a)
    A a3(23, 'g');       // конструктор A(int a, char b)
}

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


Эксперт
****


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

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



Цитата(votan6442 @  1.4.2014,  12:35 Найти цитируемый пост)
 private:
        int n;
        
        float **a;
        Matrix(int n){ 

1. Конструктор д.б. в public, а не в private

Цитата(votan6442 @  1.4.2014,  12:35 Найти цитируемый пост)
void SetSize(int size){
        
    n=size;}

2. n-то ты изменил, а размер выделенной памяти под матрицу - нет. По логике, функция SetSize должна удалить выделенную ранее память (если она была выделена), и выделить новую, а уж потом делать n = size;

Цитата(votan6442 @  1.4.2014,  12:35 Найти цитируемый пост)
Matrix operator-(const Matrix &rhs){
      Matrix result(*this);

3. Конструктора копирования у тебя не создано (и, кстати, очень зря), однако ты пытаешься его вызвать. Да и зачем тебе копия ? Делай просто result.SetSize( n );

Цитата(votan6442 @  1.4.2014,  12:35 Найти цитируемый пост)
~Matrix();

4. Ты объявил деструктор, но не описал его. При попытке вызвать его (по завершении main, к примеру) линковщик не найдёт тела деструктора и ругнётся.

Перед тем, как начинать писать программы, почитай теорию.
Как минимум [url= http://ru.wikipedia.org/wiki/Правило_трёх_...ограммирование)]Правило_трёх[/url]


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

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

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

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

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


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

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


 




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


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

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