JWSPLIN - Współliniowość punktów

0

Witam, mam problem z kodem. Nie odpala mi, bo ma problem z użyciem wszystkich getterów które stworzyłem:

#include <iostream>
#include <sstream>
#include <vector>

class punkt
{
private:
    float X, Y;
public:
    punkt(float x, float y) : X(x), Y(y) {}
    float & get_X() {
        return X;
    }
    float & get_Y() {
        return Y;
    }
    ~punkt();
};

int main() {
    float t, temp_x, temp_y;
    std::string input;
    float a, b;
    std::vector<punkt> points;
    std::cin >> t;
    for (int i = 0; i < t; ++i) {
        std::getline(std::cin, input);
        std::stringstream stream(input);
        for (int j = 0; j < 3; ++j) {
            stream >> temp_x >> temp_y;
            points.push_back(punkt(temp_x, temp_y));
        }
        // y = ax + b
        a = (points[0].get_Y() - points[1].get_Y()) / (points[0].get_X() - points[1].get_X());
        b = points[0].get_Y() - a * points[0].get_X();
        if (points[2].get_Y() == a * points[2].get_X() + b) {
            std::cout << "TAK";
        }
        else {
            std::cout << "NIE";
        }
    }
    return 0;
}

error: invalid use of member 'float punkt::get_X()' (did you forget the '&' ?)
a = (points[0].get_Y - points[1].get_Y) / (points[0].get_X - points[1].get_X);

Co mogę z tym zrobić?

1

Nie znam się za dobrze na C++, ale:

  1. Na ideone.com (wybrany język: C++, ten bez liczby 14) kompilator wyrzuca inny błąd (i to kilka razy) (link: https://ideone.com/pJPUfJ):
undefined reference to `punkt::~punkt()'
  1. Błąd przestaje się pojawiać, gdy dopisać ciało destruktora: ~punkt() { };. I nie ma więcej błędów.
  2. Możesz zerknąć tutaj: https://stackoverflow.com/questions/18302617/undefined-reference-to-destructor-error-in-c

Co do błędu, którego opis wkleiłeś: widzę w tym opisie linijkę kodu, której nie ma w pokazanym przez Ciebie kodzie. Domniemywam, że błąd dotyczy jakiejś starej wersji kodu, a Ty przez przypadek pokazałeś już poprawioną.


UPDATE: Dopiero teraz zauważyłem, że pobierasz dane z wejścia. Sprawdziłem, dla przykładowych danych wejściowych błędów nie ma. Przykładowe dane wejściowe:

8
10.1 20.2
10.1 20.2
10.1 20.2
10.1 20.2
10.1 20.2
10.1 20.2
10.1 20.2
10.1 20.2

Wynik dla tych danych:

NIENIENIENIENIENIENIENIE
1

Do czego potrzebna jest Ci własna implementacja destruktora? IMHO, niech kompilator stworzy domyślny.
Kod klasy point można zapisać w postaci struktury POD.

struct punkt
{
    float X {0.0}, Y {0.0};
};

Która w programie będzie używana w następujący sposób:

....
 points.push_back({temp_x, temp_y})
....
 a = (points[0].Y - points[1].Y) / (points[0].X - points[1].X);
 b = points[0].Y - a * points[0].X;
....
0
  • Brakuje ci destruktora który zadeklarowałeś zaś nie zdefiniowałeś.
  • Twoje gettery są równocześnie setterami.
  • Nie musisz dawać inną nazwę składowych niż parametry konstruktora
class punkt
{
   private:
   float x, y;
   public:
   punkt(float x,float y):x(x),y(y) {}
   void set(float x,float y) { this.x=x; this.y=y; }
   const float &get_x()const { return x; }
   const float &get_y() { return y; }
};

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