+ Ответить в теме
Показано с 1 по 4 из 4

Тема: Выдает ошибку в 47 строке. "Выражение должно иметь тип указателя на объект"

  1. #1
    dummy forevercom is on a distinguished road
    Регистрация
    19.11.2017
    Сообщений
    3
    Вес репутации
    0

    По умолчанию Выдает ошибку в 47 строке. "Выражение должно иметь тип указателя на объект"

    задание звучит так:Фирма имеет 10 магазинов. Информация о доходе каждого магазина за
    каждый месяц года хранится в двумерном массиве (первого магазина — в первой
    строке, второго — во второй и т. д.). Составить программу для расчета
    среднемесячного дохода любого магазина. Ввод, вывод элементов массива, а также требуемые
    действия реализовать с помощью подпрограмм. Все подпрограммы должны иметь
    независимый интерфейс.

    Код cpp:
    1. #include "stdafx.h"
    2. #include <iostream>
    3. #include <clocale>
    4. #include <time.h>
    5. #include <iomanip>
    6.  
    7. using namespace std;
    8. const int N = 10;
    9. const int M = 12;
    10. void input(int mas[N][M]);
    11. void output(int mas[N][M]);
    12. void sum(int mas[N][M], int i, int sumn);
    13.  
    14. void main()
    15. {
    16.     int j, i, sumn;
    17.     int mas[N][M];
    18.     input(mas);
    19.     output(mas);
    20.     sum(mas,i, sumn);
    21.     cin >> i;
    22.     sumn = 0;
    23.     cout << "\nAverage monthly income of the store № " << i << "=" << sumn / 12;
    24.  
    25.     system("pause");
    26. }
    27. void input(int mas[N][M])
    28. {
    29.     srand(time(NULL));
    30.     for (int i = 0; i < N; i++)
    31.         for (int j = 0; j < M; j++)
    32.             mas[i][j] = rand() % 100;
    33. }
    34. void output(int mas[N][M])
    35. {
    36.     for (int i = 0; i < N; i++)
    37.     {
    38.         for (int j = 0; j < M; j++)
    39.             cout << setw(3) << mas[i][j] << " ";
    40.         cout << endl;
    41.     }
    42. }
    43. void sum(int mas,int i, int sumn)
    44. {
    45.     sumn = 0;
    46.     for (int j = 0; j<M; j++) sumn += mas[i, j];
    47. }
    Последний раз редактировалось Romeo; 03.12.2017 в 12:06. Причина: Лишние переводы кареток в коде

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,091
    Вес репутации
    21

    По умолчанию Re: Выдает ошибку в 47 строке. "Выражение должно иметь тип указателя на объект"

    1. Почему протитипы объявления и определения функции sum отличаются? Собственно, попытка два раза разыменовать int и приводит к указанной ошибке.

    2. В функцию sum передаётся неинициализированное значение i. Так как i создано на стеке, без инициализации там будет лежать "мусор", что приведёт к крашу программы при запуске.

    3. Есть предположение, что вызов функции sum должен быть опущен вниз на два строки, так как зануление переменной sumn прямо перед её выводом так же выглядит нелогичным.

    4. Вижу, что ты пытаешься вернуть сумму через параметр sumn. Для того, чтобы это сделать, параметр нужно превратить в ссылку, так как на данный момент внутри функции sum ты просто модифицируешь копию переменной, созданной на стеке.
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  4. #3
    dummy forevercom is on a distinguished road
    Регистрация
    19.11.2017
    Сообщений
    3
    Вес репутации
    0

    По умолчанию Re: Выдает ошибку в 47 строке. "Выражение должно иметь тип указателя на объект"

    Цитата Сообщение от Romeo Посмотреть сообщение
    1. Почему протитипы объявления и определения функции sum отличаются? Собственно, попытка два раза разыменовать int и приводит к указанной ошибке.

    2. В функцию sum передаётся неинициализированное значение i. Так как i создано на стеке, без инициализации там будет лежать "мусор", что приведёт к крашу программы при запуске.

    3. Есть предположение, что вызов функции sum должен быть опущен вниз на два строки, так как зануление переменной sumn прямо перед её выводом так же выглядит нелогичным.

    4. Вижу, что ты пытаешься вернуть сумму через параметр sumn. Для того, чтобы это сделать, параметр нужно превратить в ссылку, так как на данный момент внутри функции sum ты просто модифицируешь копию переменной, созданной на стеке.
    Я уже разобралась с этой проблемой, спасибо

  5. #4
    developer Слива is on a distinguished road
    Регистрация
    19.03.2016
    Сообщений
    133
    Вес репутации
    3

    Cool Re: Выдает ошибку в 47 строке. "Выражение должно иметь тип указателя на объект"

    Я ничего не понял. Он тебе указал на ошибки, за которые ты должна была сказать спасибо и исправить их. Но потом ты сказала, что уже разобралась с этой проблемой. Зачем ты создавала тему-то вообще? Тебе помощь еще нужна по этой программе?
    Программа вся кривая и косая+еще ошибка, вот это: mas[i, j]; - пишется не так, а вот так:
    mas[i][j];
    Вот как надо программы писать:
    Код :
    1. //---------------------------------------------------------------------------
    2. #include <vcl>
    3. #include <iostream>
    4. #include <conio>
    5. #include <iomanip>
    6. #pragma hdrstop
    7. //---------------------------------------------------------------------------
    8. #pragma argsused
    9. using namespace std;
    10. const int N = 10;
    11. const int M = 12;
    12. Massiv2[N][M] = {0};
    13.  
    14. void input(int (*mas)[M])
    15. {
    16.     int i, j;
    17.     srand(time(NULL));
    18.     for(int i = 0; i < N; i++)
    19.         for(int j = 0; j < M; j++)
    20.             mas[i][j] = rand()%100;
    21. }
    22.  
    23. void output(int (*mas)[M])
    24. {
    25.     cout << "\nMassiv2:\n";
    26.     for(int i = 0; i < N; i++)
    27.     {
    28.         for(int j = 0; j < M; j++)
    29.             cout << setw(2) << mas[i][j] << " ";
    30.         cout << endl;
    31.     }
    32. }
    33.  
    34. void Summa(int (*z)[M], int i, int &Sum)
    35. {
    36.     Sum = 0;
    37.     for(int j = 0; j < M; j++)
    38.         Sum += z[i][j];
    39. }
    40.  
    41. int main(int argc, char* argv[])
    42. {
    43. int Nomer = 0, z = 8;
    44.  
    45. input(Massiv2);
    46. output(Massiv2);
    47. cout << "Vvedite nomer magazina ot 1 do 10:\n";
    48. cin >> Nomer;
    49. Summa(Massiv2, Nomer-1, z);
    50. cout << "\nSumma = " << z << "\n";
    51. cout << "\nAverage monthly income of the store N" << Nomer << " = " << z/12;
    52.  
    53. getch();
    54. return 0;
    55. }
    56. //---------------------------------------------------------------------------
    Последний раз редактировалось Слива; 04.12.2017 в 07:59. Причина: Добавил код.

+ Ответить в теме

Похожие темы

  1. Сконструировать запрос "по дереву" - получить "коэффициент"
    Здравствуйте, коллеги. По работе родилась небольшая подзадачка. Имеется простенькая таблица, реализующая древовидные данные: Create Table...
    от BBB в разделе SQL
  2. Ежегодные курсы: "Java Software Development" и "Системное программирование на С/С++"
    ПРЦНИТ СГУ, Центр Олимпиадной подготовки программистов при поддержке компании "Мирантис" организует ежегодные курсы: "Java Software Development"...
    от lerasss в разделе Поиск работы и заказов.
  3. Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в Builder
    При использовании следующего кода: Word = CreateOleObject("Word.Application.8"); Word.OlePropertySet("Visible", true);...
    от AleksP в разделе C и C++
  4. Как создать "сторонний "COM-объект?
    Добрый день! Подскажите, пожалуйста, как мне создать com-объект, который прописан в реестре? Со своими com-объектами , т.е. которые описаны у меня...
    от Ivan093 в разделе C и C++

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения