@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 Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Как собираете проект? Ошибка в том, что линкер не может найти определение метода, потому что оно в другом cpp файле, а он не включен в сборку.
Ответ написан
@school_toddler
Линкер не находит реализацию метода, хотя объявление(прототип метода) есть в хэдере.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
от 180 000 до 200 000 ₽
До 100 000 ₽
от 84 000 до 93 000 ₽
16 июн. 2024, в 13:45
15000 руб./за проект
16 июн. 2024, в 13:36
10000 руб./за проект
16 июн. 2024, в 12:59
6000 руб./за проект