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

C++ Stephen Prata. Proszę o małą pomoc z programem.

Object Storage Arubacloud
0 głosów
260 wizyt
pytanie zadane 29 sierpnia 2016 w C i C++ przez michaloxs Początkujący (280 p.)

Witam. Ostatnimi czasy przerabiam sobie na wakacjach podręcznik stephena Prata. Mam problem z jednym ćwiczeniem. Oto program, który napisałem:

Plik1:

#ifndef NAGL_HPP
#define NAGL_HPP
namespace SALES
{
    const int QUATERS=4;
    struct Sales
    {
        double sales[QUATERS];
        double average;
        double max;
        double min;
    };
    void setSale(Sales & s,const double ar[],int n);
    void setSale(Sales & s);
    void showSales(const Sales & s);
}
#endif // NAGL_HPP

Plik2:

#include<iostream>
#include "nagl.hpp"
using namespace std;
using namespace SALES;
void setSale(Sales & s,const double ar[],int n)
{
    int total=0;
    double max=0;
    double min=0;
    for(int i=0;i<n;i++)
    {
        s.sales[i]=ar[i];
        if(max<s.sales[i])
            max=s.sales[i];
        else if (min>s.sales[i])
            min=s.sales[i];
       total+=s.sales[i];


    }
    int average=total/n;
    s.max=max;
    s.min=min;
    s.average=average;

}
void setSale(Sales & s)
{
    for(int i=0;i<4;i++)
    {
        cout<<"Podaj wartosci dla "<<i+1<<"kwartlow: ";
        cin>>s.sales[i];
        }
    int total=0;
    double max;
    double min;
    for(int i=0;i<4;i++)
    {
        if(max<s.sales[i])
            max=s.sales[i];
        else if (min>s.sales[i])
            min=s.sales[i];
       total+=s.sales[i];
    }
    int average=total/4;
    s.max=max;
    s.min=min;
    s.average=average;
}
void showSales(const Sales & s)
{
    for(int i=0;i<4;i++)
        cout<<s.sales[i]<<endl;
    cout<<s.average<<endl;
    cout<<s.max<<endl;
    cout<<s.min<<endl;
}

Plik3:

#include<iostream>
#include "nagl.hpp"
using namespace SALES;
using namespace std;
int main()
{
    Sales hamburger;
    Sales hotdog;
    double tab[QUATERS]={4.2,5.1,6.9,21.37};
    setSale(hotdog,tab,QUATERS);
    setSale(hamburger);
    showSales(hotdog);
    showSales(hamburger);
    return 0;
}

Po próbie kompilacji tego programu wyskakują mi takie błędy:

||=== Build: Debug in rozdz 9 cw 4 (compiler: GNU GCC Compiler) ===|
obj\Debug\file2.o||In function `main':|
C:\Users\ja\Desktop\programowanie\rozdz 9 cw 4\file2.cpp|10|undefined reference to `SALES::setSale(SALES::Sales&, double const*, int)'|
C:\Users\ja\Desktop\programowanie\rozdz 9 cw 4\file2.cpp|11|undefined reference to `SALES::setSale(SALES::Sales&)'|
C:\Users\ja\Desktop\programowanie\rozdz 9 cw 4\file2.cpp|12|undefined reference to `SALES::showSales(SALES::Sales const&)'|
C:\Users\ja\Desktop\programowanie\rozdz 9 cw 4\file2.cpp|13|undefined reference to `SALES::showSales(SALES::Sales const&)'|
||error: ld returned 1 exit status|
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Za wszelką pomoc będę bardzo wdzięczny. Spodziewam się, że coś zrąbałem z referencjami, ale nie mam pojęcia co.
 

 

2 odpowiedzi

+2 głosów
odpowiedź 29 sierpnia 2016 przez L33TT12 Gaduła (3,950 p.)
wybrane 29 sierpnia 2016 przez michaloxs
 
Najlepsza
W pliku 2 zamień total na double, inaczej możesz stracić dane, oraz do zmiennej max i min przypisz 0.
A cały problem polega na tym, że w definicjach funkcji nie używasz operatora zasięgu SALES
SALES::showSales SALES::setSale SALES::setSale
1
komentarz 29 sierpnia 2016 przez michaloxs Początkujący (280 p.)
Działa! Dzięki!
+2 głosów
odpowiedź 29 sierpnia 2016 przez criss Mędrzec (172,590 p.)
Zadeklarowałeś funkcje (te których się czepia kompilator) w namespace-ie, ale definiujesz je poza namespace-em. Dla kompilatora to zupełnie inne funkcje. using namespace SALES nie załatwia sprawy. Tak tylko deklarujesz, że używasz nazw mogących pochodzić z tego namespace-a, ale przy definicji musisz sprecyzowac co definiuejsz. Możesz każdą z definiowanych funkcji (nazw) poprzedzić SALES:: albo zamknąć w takich samych klamrach jak w przyapdku nagl.hpp

Podobne pytania

0 głosów
1 odpowiedź 407 wizyt
pytanie zadane 9 września 2017 w C i C++ przez Modferno Początkujący (400 p.)
0 głosów
2 odpowiedzi 972 wizyt
0 głosów
2 odpowiedzi 949 wizyt

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 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!

...