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

Błąd funkcji: First defined here

Object Storage Arubacloud
0 głosów
630 wizyt
pytanie zadane 17 kwietnia 2017 w C i C++ przez Krzychu234 Początkujący (350 p.)

Mam taką funkcje:

#include "nagl.h"

char ktory;
double promien, bok1, bok2, podstawa, wysokosc, podstawa_d, podstawa_g;

static float funkcja_pola()
{                                              //tutaj mam błąd! :/
    cout<< "Czego pole chcesz obliczyc?\n"
        << "\n1. kola"
        << "\n2. kwadrata/prostokata"
        << "\n3. rombu"
        << "\n4. rownolegloboku"
        << "\n5. trapezu"
        << "\n6. trojkata";

        ktory=getch();

        switch(ktory)
          {
          case '1':
            cout<<"\nPodaj dlugosc promienia: ";
            cin>>promien;
            cout<<"Pole wynosi: " << promien*promien*3.14 << "cm2";
            break;

          case '2':
            cout<<"\nPodaj dlugosc pierwszego boku: ";
            cin>> bok1;
            cout<< "Podaj dlugosc drugiego boku: ";
            cin>> bok2;
            cout << "Pole wynosi: " <<bok1*bok2<< "cm2\n";
            break;

          case '3':
            cout<< "\nPodaj dlugosc podstawy: ";
            cin>> podstawa ;
            cout<< "Podaj dlugosc wysokosci: ";
            cin>> wysokosc ;
            cout << "Pole wynosi " << podstawa*wysokosc << "cm2 \n";
            break;

          case '4':
            cout << "\nPodaj dlugosc Podstawy: ";
            cin >> podstawa;
            cout << "Podaj dlugosc wysokosci: ";
            cin >> wysokosc;
            cout << "pole wynosi " << podstawa*wysokosc <<"cm2 \n";
            break;

          case '5':
            cout << "\nPodaj dlugosc dolnej podstawy: ";
            cin >> podstawa_d;
            cout << "podaj dlugosc gornej podstawy";
            cin >> podstawa_g;
            cout << "podaj dlugosc wysokosci: ";
            cin >> wysokosc;
            cout << "\nPole wynosi " << 0.5*(podstawa_d+podstawa_g)*wysokosc <<"cm2 \n";
            break;

          case '6':
            cout << "\nPodaj dlugosc jednego boku: ";
            cin >> bok1;
            cout << "podaj dlugosc wysokosci tego boku: ";
            cin >> wysokosc;
            cout <<"\nPole wynosi " << 0.5*wysokosc*bok1 << "cm2 \n";
            break;
        }
}

a tu macie nagłówek:

#include <iostream>
#include <time.h>
#include <cstdlib>
#include <stdio.h>
#include <conio.h>

using namespace std;

a tutaj plik w którym chce wywołać tę funkcje:

#include "nagl.h"
#include "Dodawanie.cpp"
#include "Odejmowanie.cpp"
#include "Mnożenie.cpp"
#include "Dzielenie.cpp"
#include "Pole.cpp"

int wybor;

int main()
{

    for(;;)
    {
    cout<<"         MENU GLOWNE"
        <<"\n--------------------------"
        <<"\n1.  Dodawanie"
        <<"\n2.  Odejmowanie"
        <<"\n3.  Mnozenie"
        <<"\n4.  Dzielenie"
        <<"\n5.  Pole";
        
    cin>>wybor;

    switch(wybor)
    {
    case 1:
        system("cls");
        funkcja_dodawania(1, 2);
    break;

    case 2:
        system("cls");
        funkcja_odejmowania(1, 2);
    break;

    case 3:
        system("cls");
        funkcja_mnozenia(1, 2);
    break;

    case 4:
        system("cls");
        funkcja_dzielenia(1,2);
    break;

    case 5:
         system("cls");
         funkcja_pola();

default: cout<<"Nie ma takiej opcji!";
    }
    getchar();
    getchar();
    system("cls");
   }
}

a problem jest taki że w pliku z funkcją, w siódmej linijce mam błąd "first defined here", nie mam pojęcia jak to naprawić

3
komentarz 17 kwietnia 2017 przez JAKUBW Nałogowiec (33,470 p.)
Nigdy nie includuj plików cpp!
komentarz 18 kwietnia 2017 przez Krzychu234 Początkujący (350 p.)
czemu?
komentarz 18 kwietnia 2017 przez Arkadiusz Sikorski Pasjonat (20,160 p.)

Bo może tak się zdarzyć, że będziesz miał wielokrotne definicje tych samych funkcji, co wprowadzi kompilator w błąd (nie będzie wiedział, która definicja jest tą właściwą; nawet jeżeli będą takie same, co dzieje się w przypadku załączania plików *.cpp, to kompilator potraktuje je jako dwie różne). Załączaj tylko pliki nagłówkowe.

komentarz 18 kwietnia 2017 przez Krzychu234 Początkujący (350 p.)
nigdy nie miałem takiego problemu

3 odpowiedzi

0 głosów
odpowiedź 18 kwietnia 2017 przez Krzychu234 Początkujący (350 p.)
 
Najlepsza

Przez ten cały czas zdążyłem już to samemu naprawić:

#include "nagl.h"

//zamiast deklaracji zmiennych tutaj

/*dałem je do funkcji*/static float funkcja_pola(char ktory,double promien,double bok1,double bok2,double podstawa,double wysokosc,double podstawa_d,double podstawa_g)
{
  

i wszystko działa yes

0 głosów
odpowiedź 17 kwietnia 2017 przez Arkadiusz Sikorski Pasjonat (20,160 p.)
Czemu funkcja_pola jest funkcją statyczną? O ile pamiętam, do takich funkcji nie można się odwołać spoza pliku, w którym taka funkcja się znajduje.
komentarz 17 kwietnia 2017 przez Krzychu234 Początkujący (350 p.)
mam dużo  statycznych funkcji, i do wszystkich odwołuje się z innego pliku
komentarz 17 kwietnia 2017 przez Molester Bywalec (2,920 p.)
@up

Faktycznie gdzieś w odpowiedzi na twoje pytanie dodałem static przed funkcją. Tak jak kolega wyżej napisał funkcje statyczne to właśnie takie do których się można odwołać tylko wewnątrz pliku, pomyliło mi się. My bad.
komentarz 18 kwietnia 2017 przez Krzychu234 Początkujący (350 p.)
tylko że jak w moich innych funkcjach jak wyrzuce static to przestają działać, więc chyba tak ma być

Podobne pytania

0 głosów
1 odpowiedź 202 wizyt
pytanie zadane 16 kwietnia 2017 w C i C++ przez Krzychu234 Początkujący (350 p.)
0 głosów
1 odpowiedź 383 wizyt
pytanie zadane 25 lipca 2016 w C i C++ przez Bot Użytkownik (760 p.)
0 głosów
2 odpowiedzi 190 wizyt

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

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

...