Struktury – błąd przy drukowaniu z funkcji

0
#include <iostream>
#include <string.h>
#include <cstdlib>
#include <math.h>

using namespace std;

typedef struct PUNKT {
    double x,y;

} P,Q;

double odleglosc();


int main()
{
    P punkt;
    Q Punkt;    // styl C++

    punkt.x = 1;
    punkt.y = 1;

    Punkt.x = 3;
    Punkt.y = 2;

    cout << "Wspol punktu P: " << punkt.x << ',' << punkt.y << endl;
    cout << "Wspol punktu Q: " << Punkt.x << ',' << Punkt.y << endl;
   cout << "Odl P od pocz ukl: " << double odleglosc(P *punkt) << endl;

    system("pause >nul");

    return 0;
}

double odleglosc(P *punkt)
{
    return sqrt((punkt->x)*(punkt->x) + (punkt->y)*(punkt->y));
}

Otrzymuję błąd od double odleglosc(P *punkt)

Z3.cpp|30|error: expected primary-expression before 'double'|

Sądzę, że po prostu czegoś nie rozumiem, więc proszę o oświecenie. Dziękuję za odpowiedzi.

4

cout << "Odl P od pocz ukl: " << double odleglosc(P *punkt) << endl; no bo co to za wywołanie funkcji ma być? Inne funkcje umiesz wywołać poprawnie.

0

ale co jest nie tak, nie rozumiem

3

Zmień tę linijkę:

cout << "Odl P od pocz ukl: " << double odleglosc(P *punkt) << endl;

na taką:

cout << "Odl P od pocz ukl: " << odleglosc(tu_zmienna) << endl;

Problem jest taki, że zamiast wywołać funkcję odleglosc, Ty przekleiłaś jej nagłówek.

0

A ja mam takie pytanie w temacie: dlaczego przed double jest oczekiwane primary-expression? Chodzi mi o specyfikację języka. Przeglądam i przeglądam te dwie strony, ale nie mogę tego znaleźć, może ktoś wie?

http://en.cppreference.com/w/cpp/language/expressions
http://en.cppreference.com/w/cpp/language/declarations


UPDATE: Może token double jest traktowany jako identyfikator? Ale czy wtedy primary-expression nie powinno być oczekiwanie po nim?

0
cout << "Odl P od pocz ukl: " << odleglosc( &Punkt) << endl;

Zmieniłam zmienną ale teraz otrzymuję błąd

Z3.cpp|33|error: too many arguments to function 'double odleglosc()'|

Napisałam funkcje void do wyświetla punkt

void Drukuj(PUNKT *punkt)
{
cout << " punkt " << punkt->x << ' ' << punkt->y  << endl;
}

wywołanie w main

Drukuj( &Punkt);

działa bez zarzutu

1
anAA napisał(a):

Zmieniłam zmienną ale teraz otrzymuję błąd

Z3.cpp|33|error: too many arguments to function 'double odleglosc()'|

Prototyp funkcji nie posiada parametru, a nagłówek w definicji posiada. Kod powinien wyglądać tak:

double odleglosc(P *punkt);

int main()
{
    // ...
    cout << "Odl P od pocz ukl: " << odleglosc(&Punkt) << endl;
    // ...
}

double odleglosc(P *punkt)
{
    return sqrt((punkt->x) * (punkt->x) + (punkt->y) * (punkt->y));
}
0

DZIAŁA!!! - dziękuję za cierpliwość

1 użytkowników online, w tym zalogowanych: 0, gości: 1