@sharkee

Как исправить ошибку undefined reference to при коспиляции кода с++ в VS?

Rectangle.h
class Rectangle
{
    double length; 
    double width;
    double centerX;
    double centerY;

public:
    Rectangle(double rectangle_length, double rectangle_width, double rectangle_centerX, double rectangle_centerY)
    {
        length = rectangle_length;
        width = rectangle_width;
        centerX = rectangle_centerX;
        centerY = rectangle_centerY;
    }
    void Vertex();
    double Perimetr();
    void print_inf();
    bool check_point(double X_point, double Y_point);
    bool check_abscissa_axis();
    bool check_ordinate_axis();
};

Rectangle.cpp

#include <iostream>
#include "Rectangle.h"

    double Rectangle :: Perimetr()
    {
        return length * width;
    }

    void Rectangle :: Vertex()
    {
        std :: cout << "Координата вершины A:  X:" << centerX - length/2 << "    Y:" << centerY - width/2 << std :: endl;
        std :: cout << "Координата вершины B:  X:" << centerX + length/2 << "    Y:" << centerY - width/2 << std :: endl;
        std :: cout << "Координата вершины C:  X:" << centerX + length/2 << "    Y:" << centerY + width/2 << std :: endl;
        std :: cout << "Координата вершины D:  X:" << centerX - length/2 << "    Y:" << centerY + width/2 << std :: endl;
    }   

    void Rectangle :: print_inf()
    {
        std :: cout << "Длина стороны прямоугольника: " << length << std :: endl;
        std :: cout << "Ширина стороны прямоугольника: " << width << std :: endl;
        std :: cout << "Периметр прямоугольника: " << Perimetr() << std :: endl;
        Vertex();
        std :: cout << "Координаты центра прямоугольника:\tX:" << centerX << "\tY: "<< centerY << std :: endl << std :: endl;
    }

    bool Rectangle :: check_point(double X_point, double Y_point)
    {
        if ((((X_point >= centerX + length/2 - 0.005) && (X_point <= 0.005 + centerX + length/2)) && (Y_point <= (centerY + width/2)) && (Y_point >= (centerY - width/2))) ||
            (((X_point >= centerX - length/2 - 0.005) && (X_point <= 0.005 + centerX - length/2)) && (Y_point <= (centerY + width/2)) && (Y_point >= (centerY - width/2))) ||
            (((Y_point >= centerY + width/2 - 0.005) && (Y_point <= 0.005 + centerY + width/2)) && (X_point <= (centerX + length/2)) && (X_point >= (centerX - length/2))) ||
            (((Y_point >= centerY - width/2 - 0.005) && (Y_point <= 0.005 + centerY - width/2)) && (X_point <= (centerX + length/2)) && (X_point >= (centerX - length/2))))
        {
            return 1;
        }
        else { return 0; }
    }

    bool Rectangle :: check_abscissa_axis()
    {
        if (((centerY + width/2) > 0) && ((centerY - width/2) > 0) || ((centerY + width/2) < 0) && ((centerY - width/2) < 0))
        {
            return 0;
        }
        else { return 1; }
    }

    bool Rectangle :: check_ordinate_axis()
    {
        if (((centerX + length/2) > 0) && ((centerX - length/2) > 0) || ((centerX + length/2) < 0) && ((centerX - length/2) < 0))
        {
            return 0;
        }
        else { return 1; }
    }

main.cpp
#include <iostream>
#include "Rectangle.h"


int main()
{
    double length, width, centerX, centerY, point_x, point_y;

    std :: cout << "Введите длину прямоугольника: "; std :: cin >> length; 
    std :: cout << "Введите ширину прямоугольника: "; std :: cin >> width; std :: cout << std :: endl;
    std :: cout << "Введите координату X центра прямоугольника: "; std :: cin >> centerX; 
    std :: cout << "Введите координату Y центра прямоугольника: "; std :: cin >> centerY; std :: cout << std :: endl << std :: endl;

    Rectangle rectangle1(length, width, centerX, centerY); 

    rectangle1.print_inf();

    std :: cout << "Для проверки точки на принадлежность границе фигуры:" << std :: endl;
    std :: cout << "Введите координату X точки: "; std :: cin >> point_x; 
    std :: cout << "Введите координату Y точки: "; std :: cin >> point_y; std :: cout << std :: endl << std :: endl;
    if (rectangle1.check_point(point_x,point_y))
    {
        std :: cout << "Указанная точка принадлежит границе фигуры" << std :: endl << std :: endl;
    }
    else {std :: cout << "Указанная точка не принадлежит границе фигуры" << std :: endl << std :: endl;}

    if (rectangle1.check_abscissa_axis())
    {
        std :: cout << "Фигура пересекает ось абцисс" << std :: endl << std :: endl;
    }
    else {std :: cout << "Фигура не пересекает ось абцисс" << std :: endl << std :: endl;}

    if (rectangle1.check_ordinate_axis())
    {
        std :: cout << "Фигура пересекает ось ординат" << std :: endl << std :: endl;
    }
    else {std :: cout << "Фигура не пересекает ось ординат" << std :: endl << std :: endl;}

    return 0;
}

При запуске кода на все методы выдает ошибку undefined reference to
к примеру: undefined reference to `Rectangle::check_ordinate_axis()'
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Как собираете проект? Ошибка в том, что линкер не может найти определение метода, потому что оно в другом cpp файле, а он не включен в сборку.
Ответ написан
@school_toddler
Линкер не находит реализацию метода, хотя объявление(прототип метода) есть в хэдере.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы