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

Problem z - undefined reference to `function'|

Object Storage Arubacloud
0 głosów
796 wizyt
pytanie zadane 16 maja 2017 w C i C++ przez Kamil Paradowski Użytkownik (620 p.)

Witam, zmagam się obecnie z tym zadaniem: 

"Napisz program proszący użytkownika o podanie do 10 wyników golfowych, które będą zapisane w
tablicy. Należy umożliwić zakończenie wprowadzania danych przed podaniem wszystkich tych
wyników. Program ma pokazać wyniki w jednym wierszu i podać wynik średni. Obsługa
wprowadzania danych, ich wyświetlania i obliczania średniej ma być zrealizowana w trzech
osobnych funkcjach przetwarzających tablice. "

 

Napisałem do tej pory ten kod: 

 

#include <iostream>

void a(short);
void b(short, int);
long double c(short, float e, int);

int main()
{
    short d[10]; //Tablica przechowujaca do 10 wynikow max
    float e; //Zmienna przechowujaca srednią
    int i; //Zmienna przechowująca ilosc podanych wynikow golfowych
    int j; //Zmienna do dwóch pętli
    a(d[10]);
    b(d[10],i);
    c(d[10],e,i);
    return 0;
}

void a(short d[10])
{
    std::cout<<"Podaj do 10-ciu ocen golfowych. Wprowadzenie liczby -2137 przerywa wprowadzanie danych: "<<std::endl;
    for(int i=0; i<10; i++)
    {
        std::cout<<"Ocena #"<<i+1<<": ";
        std::cin>>d[i];
        if (d[i]==-2137)
            break;
    }
}
void b(short d[10],int i)
{
    for(int j=0; j<i; j++)
        std::cout<<"Ocena #"<<j+1<<" ="<<d[j]<<" ";
}
long double c(short d[10], float e, int i)
{
    for(int j=0; j<i; j++)
        e=e+d[j];
    std::cout<<"Suma ocen podzielona przez "<<i<<" jest ="<<(e/(i+1));
    return e;
}

Kiedy chcę go skompilować w Code::Blocksie występują takie oto błędy

 

:

Jestem początkującym adaptem C++, pierwszy raz zmagam się z takim błędem, nie pokazuje on dokładnie który wiersz jest popsuty. Szukałem informacji w Google na ten temat, jednak błąd ten jest dosyć ogólny i zależnie od kodu może on znaczyć co innego... Gdzie dokładnie leży rozwiązanie tego problemu?

2 odpowiedzi

+1 głos
odpowiedź 16 maja 2017 przez adrian17 Ekspert (344,860 p.)
Zadeklarowałeś funkcję a(short) - biorącą jako argument short.

Wywołujesz funkcję a(short) jako a(d[10]) - dajesz jej short (jedenasty element z 10-elementowej tablicy).

Na linii 19 definiujesz funkcję a(short d[10]) - biorącą jako argument (wskaźnik na) tablicę shortów.

Kompilator(linker) narzeka, że nie widzi definicji a(short).
komentarz 16 maja 2017 przez Kamil Paradowski Użytkownik (620 p.)
Masz może jakiś pomysł, żeby sensownie to naprawić w kodzie?
komentarz 16 maja 2017 przez adrian17 Ekspert (344,860 p.)
Chcesz, żeby funkcja brała jedną liczbę, czy tablicę?
komentarz 16 maja 2017 przez Kamil Paradowski Użytkownik (620 p.)
Użytkownik ma podać do 10 wyników golfowych, może ich być 10, może być 4. Chciałbym, żeby funkcja brała tablicę w której by te wyniki mogła pomieścić, a później ją wyświetlić.
1
komentarz 16 maja 2017 przez redie Obywatel (1,490 p.)
kolega może chciał przekazac tablicę do funkcji ale tak się nie przekazuje. Wystarczy samo d[] w funkcji a w wywołaniu podajesz d. A po drugie, oducz się pisania takich literek... Nikt nic nie będzie wiedział przy dużym kodzie co ty chcesz robić! Kolejną rzeczą złą w Twoim kodzie: zmienne e,f,i,j nie mają żadnej wartości, więc jak przekazujesz je do funkcji to zj akimiś losowymi danymi są.

float e = 0; int i = 0;
komentarz 16 maja 2017 przez adrian17 Ekspert (344,860 p.)

Chciałbym, żeby funkcja brała tablicę

To bierz wskaźnik na tablicę i ilość elementów, a nie shorta.

komentarz 16 maja 2017 przez Arkadiusz Sikorski Pasjonat (20,160 p.)
Zgadzam się w 100% z rediem, nazwy zmiennych i funkcji mówią tyle co nic.
+1 głos
odpowiedź 16 maja 2017 przez redie Obywatel (1,490 p.)
#include <iostream>

void wstaw(int* tab, unsigned dl,unsigned &ile) {
	short tmp;
	for (unsigned i = 0;i < dl;i++) {
		std::cout << "Ocena #" << i + 1 << ": ";
		std::cin >> tmp;
		if (tmp > 0) {
			tab[i] = tmp;
			ile++;
		}
		else break;
	}
}
void wyswietl(int* tab, unsigned dl) {

	for (unsigned i = 0;i < dl;i++) {
		std::cout << "Ocena #" << i + 1 << ": ";
		std::cout << tab[i] << std::endl;
	}
}
float oblicz(int* tab, float srednia, int dl) {
	for (unsigned i = 0;i < dl;i++) {
		srednia += tab[i];
	}
	return (srednia / dl);
}
int main()
{
	unsigned dl;
	float srednia = 0;
	std::cin >> dl;
	int* tab = new int[dl];
	unsigned ile = 0;
	wstaw(tab, dl, ile);
	std::cout << ile << std::endl;
	dl = ile;
	wyswietl(tab, dl);
	std::cout << oblicz(tab, srednia, dl);
	system("pause");
	return 0;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 587 wizyt
pytanie zadane 2 marca 2018 w C i C++ przez Svenowski Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 681 wizyt
0 głosów
4 odpowiedzi 8,530 wizyt
pytanie zadane 18 października 2016 w C i C++ przez MarioMZ Nowicjusz (170 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 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!

...