• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
786 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ź 289 wizyt
pytanie zadane 16 kwietnia 2017 w C i C++ przez Krzychu234 Początkujący (350 p.)
0 głosów
1 odpowiedź 635 wizyt
pytanie zadane 25 lipca 2016 w C i C++ przez Bot Użytkownik (760 p.)
0 głosów
2 odpowiedzi 235 wizyt

93,187 zapytań

142,203 odpowiedzi

322,021 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2301p. - CC PL
  5. 2269p. - Tomasz Bielak
  6. 2235p. - Łukasz Siedlecki
  7. 2232p. - rucin93
  8. 2169p. - Marcin Putra
  9. 2164p. - Adrian Wieprzkowicz
  10. 2006p. - Michal Drewniak
  11. 1950p. - Anonim 3619784
  12. 1909p. - Dawid128
  13. 1901p. - Mikbac
  14. 1744p. - rafalszastok
  15. 1487p. - Michał Telesz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...