Можем ли мы использовать cin>> в функциях-членах класса на C++?

Я пытаюсь инициализировать матрицу классов с помощью функции-члена, такой как thiis

class mat{
    int r,c;
    float **p;
    
    public:
    
    mat(){}
    mat(int,int);
    void initialize();
};
mat :: mat (int r, int c){ //check for float and int if error occurs
    p=new float*[r];
    for(int i=0; i<r; ++i){
        p[i]=new float(c);
    }
void mat :: initialize(void){
    int i,j;
    cout<<"\nEnter the elements : ";
    for(i=0;i<r;++i){
        for(j=0;j<c;++j){
            cin>>p[i][j];
        }
    }
}
int main(){
    mat m1(3,3);
    cout<<"\nInitialize M1";
    m1.initialize();
    
    
    return(0);
}

но когда я компилирую и запускаю его и пытаюсь инициализировать матрицу, программа никогда не останавливается для получения входных данных. Может ли кто-нибудь сказать мне, что я делаю неправильно?

Похоже, ваш поток плохой. Когда вы отлаживаете, можете ли вы проверить значение std::cin.good()?

scohe001 18.12.2020 20:18

Куда звонить initialize?

stark 18.12.2020 20:19

Я думаю, что ваша ошибка здесь: p[i]=new float(c); вы хотели выделить один поплавок и установить для него значение c или выделить c поплавки?

drescherjm 18.12.2020 20:19

Пожалуйста, отредактируйте свой вопрос, чтобы показать нам минимально воспроизводимый пример. А также, пожалуйста, сообщите нам, какой вклад вы даете программе.

Some programmer dude 18.12.2020 20:21

Кстати, вам не хватает } в конце вашего конструктора

lil' wing 18.12.2020 20:22

@drescherjm Правильно, код будет работать, только если c == 1.

Some programmer dude 18.12.2020 20:22

Я думаю, вам также нужно инициализировать r и c в конструкторе

tibi 18.12.2020 20:27

Для ошибки, которую я упомянул, вам нужно изменить p[i]=new float(c); на p[i]=new float[c];

drescherjm 18.12.2020 20:29

Вы не инициализируете ни c, ни r в своем конструкторе, поэтому, когда вы вызываете initialize, их значения не определены.

Rane 18.12.2020 20:30

@drescherjm, вы были правы, указав .... я должен был использовать квадратные скобки [ ] вместо ( ) ... это решило мою проблему .... Большое спасибо

shubham737 18.12.2020 20:36

@ scohe001 Мне кажется, стрим всегда хорош.

Asteroids With Wings 18.12.2020 20:37

@tibi спасибо, что указали на это..... я тоже это пропустил.

shubham737 18.12.2020 20:37

@Rane, спасибо, что указали на это ... я пропустил это ... Большое спасибо!

shubham737 18.12.2020 20:39

Вам будет намного проще жить, если вы будете использовать std::vector<std::vector<float>> вместо выделения собственных массивов — гораздо больше работы будет сделано (и правильно) за вас.

Tony Delroy 18.12.2020 20:41

Интересно... что послужило причиной выбора "можем ли мы использовать cin>> в функциях-членах в классе на C++?" как заголовок вместо «можем ли мы использовать вложенные for в функциях-членах в классе на C++»? (Я предполагаю, что ответ - это какой-то вариант "спешить с выводами - это весело"?) :)

JaMiT 18.12.2020 20:42

@JaMiT Я не большой программист, поэтому я не знаком с правильными терминами для использования .... но эй! у вас есть точка зрения.

shubham737 18.12.2020 20:47
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
16
279
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно инициализировать r и c следующим образом:

mat :: mat (int r, int c) :r(r), c(c){
    p=new float*[r];
    for(int i=0; i<r; ++i){
        p[i]=new float[c];
    }
}

и не забудьте добавить деструктор.

Это нормальная и лучшая практика использовать список инициализаторов: mat::mat(int rows, int columns) : r{rows}, c{columns} { ... }. И правильная терминология - "деструктор", а не "деконструктор".

Tony Delroy 18.12.2020 20:40

Другие вопросы по теме