Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
 Аватар для nobless1368
14 / 14 / 2
Регистрация: 04.06.2012
Сообщений: 124
Записей в блоге: 1

Undefined reference или передача string в конструктор класса

23.09.2014, 13:54. Показов 2885. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно проблема на этапе компиляции в main.cpp на 19 строке. Не понимаю, почему он требует 4 аргумента, когда у меня в объявлении сигнатуры их 3... Собственно вот ошибка компиляции: undefined reference to `Point::Point(float, float, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: ld returned 1 exit status

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef POINT_H
#define POINT_H
 
using std::string;
 
class Point {
    float x;
    float y;
    string name;
 
public:
    Point(float x, float y, const string &name);
    Point (const Point &toCopy); // конструктор копирования
 
    float getX();
    float getY();
    char* getName();
 
    void setX(float x);
    void setY(float y);
    void setName(string &name);
 
    Point createPoint(float x, float y, string name);
 
    // больше тот, который дальше от начала координат
 
    bool operator>(Point &a);
    bool operator<(Point &a);
 
    char* operator<<(Point &outPoint);
};
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "Point.h"
 
Point::Point(const Point &toCopy) {
    // TODO: копирование всех полей
}
 
float Point::getX() {
    return x;
}
 
float Point::getY() {
    return y;
}
 
string Point::getName() {
    return *name;
}
 
void Point::setX(float x) {
    this.x = x;
}
 
void Point::setY(float y) {
    this.y = y;
}
 
void Point::setName(string name) {
    this.name = name;
}
 
bool Point::operator<(Point &a) {
    return ((x + y) < (a.getX() + a.getY()));
}
 
bool Point::operator>(Point &a) {
    return ((x + y) > (a.getX() + a.getY()));
}
 
string operator<<(Point &outPoint) {
    return ("" + outPoint.getName() + " (" + outPoint.getX() + ", " + outPoint.getY() + ")");
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include "Point.h"
 
POINT_H
 
using namespace std;
 
Point * createPoint() {
    float x;
    float y;
    string name;
    cout << "Enter a name of the point: " << endl;
    getline(cin, name);
    cout << "Enter x: " << endl;
    cin >> x;
    cout << "Enter y: " << endl;
    cin >> y;
 
    Point* NewPoint = new Point(x, y, name);
    return NewPoint;
}
 
int main() {
    Point* a = createPoint();
    cout << "Created point is: " << a;
    return 0;
}
Заранее спасибо за любую оказанную помощь
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.09.2014, 13:54
Ответы с готовыми решениями:

Шаблон класса. Ошибка `undefined reference`
Доброго вечера. В следующем коде описывается незамысловатый шаблон. При разгрузке кода (т.е в 3 файла : main.cpp , chab.cpp , chab.h) ,...

Undefined reference to к шаблонному методу класса
Здравствуйте, уважаемые! Пробую разработать систему с плагинами. Есть класс реализующий интерфейс к плагину. В нем шаблонный метод...

Ошибка: undefined reference to при наследовании класса
Здравствуйте форумчане. Пытаюсь наследовать класс MyService от OAuthService и получаю множество ошибок: Ошибка: undefined reference to...

12
Заблокирован
23.09.2014, 14:03
Где реализация конструктора в cpp файле?
0
 Аватар для nobless1368
14 / 14 / 2
Регистрация: 04.06.2012
Сообщений: 124
Записей в блоге: 1
23.09.2014, 14:23  [ТС]
странно, что не скопировалось:
C++
1
2
3
4
5
Point::Point(float x, float y, string name) {
    this.x = x;
    this.y = y;
    this.name = name;
}
ну и поправил немного Point.h, только проблема осталась без изменений
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef POINT_H
#define POINT_H
 
using std::string;
 
class Point {
    float x;
    float y;
    string name;
 
public:
    Point(float x, float y, string name);
    Point (const Point &toCopy); // конструктор копирования
 
    float getX();
    float getY();
    string getName();
 
    void setX(float x);
    void setY(float y);
    void setName(string &name);
 
    Point createPoint(float x, float y, string name);
 
    // больше тот, который дальше от начала координат
 
    bool operator>(Point &a);
    bool operator<(Point &a);
 
    string operator<<(Point &outPoint);
};
 
#endif
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
23.09.2014, 14:25
nobless1368, в заголовке последний параметр передается по константной ссылке, в реализации - по значению.

И s/this.x/this->x/
0
 Аватар для nobless1368
14 / 14 / 2
Регистрация: 04.06.2012
Сообщений: 124
Записей в блоге: 1
23.09.2014, 14:37  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
в заголовке последний параметр передается по константной ссылке, в реализации - по значению
я уже исправил const в заголовке (прикрепил код чуть выше). Проблема, к сожалению, осталась...
На данный момент в Point.h
C++
1
Point createPoint(float x, float y, string name);
в реализации (Point.cpp):
C++
1
2
3
4
5
Point::Point(float x, float y, string name) {
    this->x = x;
    this->y = y;
    this->name = name;
}
в вызове все пока что по-старому:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Point * createPoint() {
    float x;
    float y;
    string name;
    cout << "Enter a name of the point: " << endl;
    getline(cin, name);
    cout << "Enter x: " << endl;
    cin >> x;
    cout << "Enter y: " << endl;
    cin >> y;
 
    Point* NewPoint = new Point(x, y, name);
    return NewPoint;
}
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2014, 14:50
Где инклуд для string? Это что?
C++
1
2
3
4
 
    this.x = x;
    this.y = y;
    this.name = name;
this - это указатель, а не объект.

Добавлено через 6 минут
В setName() в прототипе ссылка, в реализации значение.
0
 Аватар для nobless1368
14 / 14 / 2
Регистрация: 04.06.2012
Сообщений: 124
Записей в блоге: 1
23.09.2014, 14:50  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
this - это указатель, а не объект
и это я уже исправил (?) в посту, который прямо над Вашим
string содержится в пространстве имен std и в явном инклюде хедера не нуждается, на сколько я знаю (во всяком случае примеры из документации прекрасно компилятся, да и IDE не ругается)
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2014, 14:55
Это что? Что возвращаем?
C++
1
2
3
string Point::getName() {
    return *name;
}
Добавлено через 1 минуту
Цитата Сообщение от nobless1368 Посмотреть сообщение
и это я уже исправил (?) в посту, который прямо над Вашим
А в других местах?
C++
1
2
3
4
5
6
7
8
9
10
11
void Point::setX(float x) {
    this.x = x;
}
 
void Point::setY(float y) {
    this.y = y;
}
 
void Point::setName(string name) {
    this.name = name;
}
Цитата Сообщение от nobless1368 Посмотреть сообщение
string содержится в пространстве имен std и в явном инклюде хедера не нуждается
Серьёзно?

Добавлено через 2 минуты
Вам что, компилятор ошибки не показывает?
0
 Аватар для nobless1368
14 / 14 / 2
Регистрация: 04.06.2012
Сообщений: 124
Записей в блоге: 1
23.09.2014, 14:56  [ТС]
Поправил все вышесказанное. Проблема осталась. На данный момент:

Point.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef POINT_H
#define POINT_H
 
#include <string>
 
using std::string;
 
class Point {
    float x;
    float y;
    string name;
 
public:
    Point(float x, float y, string name);
    Point (const Point &toCopy); // конструктор копирования
 
    float getX();
    float getY();
    string getName();
 
    void setX(float x);
    void setY(float y);
    void setName(string name);
 
    Point createPoint(float x, float y, string name);
 
    // больше тот, который дальше от начала координат
 
    bool operator>(Point &a);
    bool operator<(Point &a);
 
    string operator<<(Point &outPoint);
};
 
#endif
Point.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "Point.h"
 
Point::Point(const Point &toCopy) {
    // TODO: копирование всех полей
}
 
Point::Point(float x, float y, string name) {
    this->x = x;
    this->y = y;
    this->name = name;
}
 
float Point::getX() {
    return x;
}
 
float Point::getY() {
    return y;
}
 
string Point::getName() {
    return name;
}
 
void Point::setX(float x) {
    this.x = x;
}
 
void Point::setY(float y) {
    this.y = y;
}
 
void Point::setName(string name) {
    this.name = name;
}
 
bool Point::operator<(Point &a) {
    return ((x + y) < (a.getX() + a.getY()));
}
 
bool Point::operator>(Point &a) {
    return ((x + y) > (a.getX() + a.getY()));
}
 
string operator<<(Point &outPoint) {
    return ("" + outPoint.getName() + " (" + outPoint.getX() + ", " + outPoint.getY() + ")");
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include "Point.h"
 
POINT_H
 
using namespace std;
 
Point * createPoint() {
    float x;
    float y;
    string name;
    cout << "Enter a name of the point: " << endl;
    getline(cin, name);
    cout << "Enter x: " << endl;
    cin >> x;
    cout << "Enter y: " << endl;
    cin >> y;
 
    Point* NewPoint = new Point(x, y, name);
    return NewPoint;
}
 
int main() {
    Point* a = createPoint();
    cout << "Created point is: " << a;
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
Вам что, компилятор ошибки не показывает? У вас до undefined reference доходить не должно. Это ошибка компоновщика, а у вас ошибок на этапе компиляции куча.
Нет, не показывает Единственная ошибка:
undefined reference to `Point::Point(float, float, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2014, 14:58
Цитата Сообщение от nobless1368 Посмотреть сообщение
Поправил все вышесказанное
Серьёзно?
Цитата Сообщение от nobless1368 Посмотреть сообщение
void Point::setX(float x) {
* * this.x = x;
}
void Point::setY(float y) {
* * this.y = y;
}
void Point::setName(string name) {
* * this.name = name;
}
Добавлено через 37 секунд
Цитата Сообщение от nobless1368 Посмотреть сообщение
Нет, не показывает
Вы что компилируете?
0
 Аватар для nobless1368
14 / 14 / 2
Регистрация: 04.06.2012
Сообщений: 124
Записей в блоге: 1
23.09.2014, 15:01  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Вы что компилируете?
CMakeFiles/**/**/main.cpp.o
In function `createPoint()':
main.cpp:19: undefined reference to `Point::Point(float, float, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2014, 15:09
Цитата Сообщение от nobless1368 Посмотреть сообщение
CMakeFiles/**/**/main.cpp.o
А Point.cpp скомпилировался?

Добавлено через 1 минуту
Последнее... У вас этот оператор разве не классу принадлежит?
Цитата Сообщение от nobless1368 Посмотреть сообщение
C++
1
2
3
string operator<<(Point &outPoint) {
  return ("" + outPoint.getName() + " (" + outPoint.getX() + ", " + outPoint.getY() + ")");
}
Здесь, из чего сроку лепите?
C++
1
return ("" + outPoint.getName() + " (" + outPoint.getX() + ", " + outPoint.getY() + ")");
1
 Аватар для nobless1368
14 / 14 / 2
Регистрация: 04.06.2012
Сообщений: 124
Записей в блоге: 1
23.09.2014, 15:19  [ТС]
дошло вроде)
должно быть
C++
1
return ("" + this->getName...
Добавлено через 26 секунд
у и без аргументов, раз уж унарный оператор и член класса
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2014, 15:19
Помогаю со студенческими работами здесь

Undefined reference при работе с статическим полем класса
Здравствуйте. Вот пример: class A { public: A(); A(const A&amp;); ~A();

Странная ошибка: [Linker error] undefined reference to `__dyn_tls_init_callback' [Linker error] undefined reference to ld returned 1 exit status
Здравствуйте. Вот недавно начал изучать книгу &quot;С++ для чайников&quot; Стефан Р. Девис 4-е издание. И напоролся на кучу ошибок) Но смог все...

Undefined reference to или почему не определена функция в Eclipce
Здравствуйте! Пишу в Еклипсе в общем проблема такая, прикрутил готовый модуль, но его функции не доступны, почему? понять не могу,...

Передача управления из конструктора класса-родителя в конструктор класса-потомка
Здравствуйте. Возможно ли передать управление из конструктора класса-родителя в конструктор класса-потомка? Например, есть класс...

Передача двумерного массива в конструктор класса
Здравствуйте! Не получается передать двумерный массив как параметр конструктора. Необходимо, чтобы пользователь ввел размерность...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru