• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomoc przy zadaniu.

Object Storage Arubacloud
0 głosów
196 wizyt
pytanie zadane 19 kwietnia 2017 w C i C++ przez troyek Nowicjusz (150 p.)

Witam, program który napisałem do zadania nie działa i nie mogę dojść co jest nie tak.

Zadanie polega na napisaniu trzyplikowego programu (zadanie 4 rozdział 9 z książki Praty).
Gotowce są w internecie ale chciałbym się dowiedzieć co jest nie tak z moim kodem.

zadanie

1.

#include <iostream>
#include "sales.h"

using namespace std;


int main()
{
    using namespace SALES;
    Sales abc;
    double tab[4]={20,30,50,100};

    setSales(abc, tab, 4);

    return 0;
}

2.

#include <iostream>
#include "sales.h"

using namespace std;
using namespace SALES;


void setSales(Sales &s, const double ar[], int n)
{
    int m=ar[0];
    int x=ar[0];
    for(int i=0; i<n; i++)
    {
        if (ar[i]>m) m=ar[i];
    }
    s.MAX=m;
        for(int k=0; k<n; k++)
    {
        if (ar[k]<x) x=ar[k];
    }
    s.MIN=x;

    for(int j=0; j<n; j++)
    {
        s.sales[j]=ar[j];
    }

    s.average=(ar[0]+ar[1]+ar[2]+ar[3])/4;
}

void setSales(Sales &s)
{
    cout<<"Podaj 4 wartosci: ";
    cin>>s.sales[0]>>s.sales[1]>>s.sales[2]>>s.sales[3];
    cout<<endl<<"Podaj wartosc najmniejszej z tych czterech: ";
    cin>>s.MIN;
    cout<<endl<<"Podaj wartosc najwieksza z tych czterech: ";
    cin>>s.MAX;
}

void showSales(const Sales &s)
{
    int i=1;
    cout<<"Cztery liczby sprzedaży:"<<endl;
    cout<<i<<". wynosi - "<<s.sales[0]<<endl;
    i++;
    cout<<i<<". wynosi - "<<s.sales[1]<<endl;
    i++;
    cout<<i<<". wynosi - "<<s.sales[2]<<endl;
    i++;
    cout<<i<<". wynosi - "<<s.sales[3]<<endl;
    cout<<"Średnia = "<<s.average<<endl;
    cout<<"MAX = "<<s.MAX<<endl;
    cout<<"MIN = "<<s.MIN<<endl;

}

3.

#ifndef SALES_H_INCLUDED
#define SALES_H_INCLUDED

#include <iostream>
#include "sales.h"

using namespace std;

namespace SALES
{
    const int QUARTERS = 4;
    struct Sales
    {
        double sales[QUARTERS];
        double average;
        double MAX;
        double MIN;
    };

void setSales(Sales &s, const double ar[], int n);
void setSales(Sales &s);
void showSales(const Sales &s);
}

#endif // SALES_H_INCLUDED

 

Kompilator wyświetla błąd undefined references to setSales(abc, tab, 4);
 

2
komentarz 19 kwietnia 2017 przez Ehlert Ekspert (212,670 p.)

Tak to niestety jest jak się używa using namespace. 

2 odpowiedzi

+2 głosów
odpowiedź 19 kwietnia 2017 przez draghan VIP (106,230 p.)
wybrane 19 kwietnia 2017 przez troyek
 
Najlepsza

Jak Ehlert słusznie zwraca uwagę, błąd wynika z niezdefiniowania odpowiednich funkcji. Kiedy definiujesz np.:

void setSales(Sales &s, const double ar[], int n)
{
    int m=ar[0];
    int x=ar[0];
    for(int i=0; i<n; i++)
    {
        if (ar[i]>m) m=ar[i];
    }
    s.MAX=m;
        for(int k=0; k<n; k++)
    {
        if (ar[k]<x) x=ar[k];
    }
    s.MIN=x;
 
    for(int j=0; j<n; j++)
    {
        s.sales[j]=ar[j];
    }
 
    s.average=(ar[0]+ar[1]+ar[2]+ar[3])/4;
}
 

to using namespace SALES nie sprawi, że Twoja definiowana funkcja będzie należała do przestrzeni nazw SALES. Musisz to jawnie pokazać:

void SALES::setSales(Sales &s, const double ar[], int n)
{
    int m=ar[0];
    int x=ar[0];
    for(int i=0; i<n; i++)
    {
        if (ar[i]>m) m=ar[i];
    }
    s.MAX=m;
        for(int k=0; k<n; k++)
    {
        if (ar[k]<x) x=ar[k];
    }
    s.MIN=x;
 
    for(int j=0; j<n; j++)
    {
        s.sales[j]=ar[j];
    }
 
    s.average=(ar[0]+ar[1]+ar[2]+ar[3])/4;
}
 

Najlepiej, gdybyś zaprzestał używania deklaracji using, a zaczął jawnie specyfikować każdy identyfikator. Taki kod jest jaśniejszy w odbiorze i (jak widać na załączonym obrazku) mniej podatny na błędy.

EDIT:

I pytanie: dlaczego w nagłówku sales.h (chyba, nie podpisałeś) włączasz nagłówek sales.h?

1
komentarz 19 kwietnia 2017 przez troyek Nowicjusz (150 p.)

Dziękuje bardzo, rozumiem już o co chodzi. smiley

komentarz 19 kwietnia 2017 przez troyek Nowicjusz (150 p.)
A tamto z sales.h to przypadek, na koniec sprawdzę cały kod jeszcze sobie. Tylko ten błąd z namespace mi nie dawał spokoju. :D
0 głosów
odpowiedź 19 kwietnia 2017 przez Programeł Gaduła (3,500 p.)
edycja 19 kwietnia 2017 przez Programeł
EDIT: Wybacz pomyliłem się, ale chyba nie zainicjalizowałeś struktury abc :P

Podobne pytania

0 głosów
0 odpowiedzi 498 wizyt
pytanie zadane 11 listopada 2019 w C i C++ przez CleaverMan Nowicjusz (140 p.)
0 głosów
1 odpowiedź 187 wizyt
pytanie zadane 6 marca 2019 w C i C++ przez dziubi21 Początkujący (310 p.)
0 głosów
2 odpowiedzi 785 wizyt
pytanie zadane 5 stycznia 2018 w C i C++ przez Mateusz Borkowski Nowicjusz (120 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...