Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
1

Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ

12.02.2014, 14:29. Показов 1555. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int _tmain(int argc, _TCHAR* argv[])
{
    Fraction x, x2, y, y2, fl, res, c;
    
    cout << "..." << endl;
    x.setFraction();
    
    cout << "..." << endl;
    y.setFraction();
 
    cout << "Умножение" << endl;
    res = x * y;
    res.ShowFraction();
 
...
}
Описание методов:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Fraction :: setFraction()
     { int numerator;
        char c;
        int denominator;
        
        
        cin >> numerator;
        cin >> c;
        cin >> denominator;
        m_Numerator = numerator;
        m_Denominator = denominator;
}
 
 Fraction Fraction :: operator* (const Fraction a) {
    Fraction tmp; //результат умножения двух дробей
    tmp.m_Numerator = m_Numerator*a.m_Numerator;
    tmp.m_Denominator = m_Denominator*a.m_Denominator;
    return tmp;
};
и при компиляции выдает ошибку при участии строки "res = x * y;", т.е. вводится дробь нормально, а дальше такая петрушка, в чем проблема? ах да, и пишет, что-то типа "error LNK2019: ссылка на неразрешенный внешний символ..."
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2014, 14:29
Ответы с готовыми решениями:

Ошибка при работе со структурами: error LNK2019: ссылка на неразрешенный внешний символ _main
#include&lt;iostream&gt; using namespace std; struct baza_film { char name_film ; char name_director ; char genre ; int...

Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ &quot;public: void __thiscall EDeque&lt;int&gt;::push_front(int const &amp;)&quot;...

Ошибка: error LNK2019: ссылка на неразрешенный внешний символ...
Не могу понять ошибку в своей программе! Ничего красным не подчёркивается, но программа не запускается. В окне &quot;Вывод&quot; в разделе...

16
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
12.02.2014, 14:32 2
А вы в аргументе перегруженного оператора принимайте ссылку, то есть:
C++
1
Fraction Fraction :: operator* (const Fraction a) {
заменить на
C++
1
Fraction Fraction :: operator* (const Fraction &a) {
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
12.02.2014, 14:33 3
по-моему из-за того что оператор= не перегружен
0
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
12.02.2014, 14:44  [ТС] 4
Цитата Сообщение от dzrkot Посмотреть сообщение
по-моему из-за того что оператор= не перегружен
вы имеете в виду оператор присваивание нужно перегрузить?

Добавлено через 20 секунд
Цитата Сообщение от ShadowFirst Посмотреть сообщение
А вы в аргументе перегруженного оператора принимайте ссылку, то есть:
C++
1
Fraction Fraction :: operator* (const Fraction a) {
заменить на
C++
1
Fraction Fraction :: operator* (const Fraction &a) {
не сработало
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
12.02.2014, 14:45 5
Цитата Сообщение от RayPas Посмотреть сообщение
вы имеете в виду оператор присваивание нужно перегрузить?
именно
вообще если выложите весь код то будет проще)
0
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
12.02.2014, 14:45 6
Кстати да, = тож нужно перегрузить, как то не подумал об этом сразу.
0
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
12.02.2014, 15:02  [ТС] 7
нужно в Res положить рез-т умножения дробей;
попытался перегрузить присваивание... теперь получается нужно этот метод применить к строчке Res = x*y, но как?
C++
1
2
3
4
Fraction Fraction :: operator= (const Fraction &a) {
     R = a.R;
     return *this;
 }
R определил как объект класса Fraction...

Добавлено через 8 минут
да, все дело в этом операторе...
оставил только x*y - проект строится без ошибок
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
12.02.2014, 15:06 8
Цитата Сообщение от RayPas Посмотреть сообщение
Fraction Fraction :: operator= (const Fraction &a) { R = a.R; return *this; }
Цитата Сообщение от RayPas Посмотреть сообщение
R определил как объект класса Fraction...
...подумайте тогда над значением а.R ...))
вы не правы, надо создать нвоый обект и вернуть его копию
т.е.
C++
1
2
3
4
Fraction R();
R.парамерты=a.параметры
return R; 
//примерно так
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2208 / 1413 / 411
Регистрация: 16.05.2013
Сообщений: 3,600
Записей в блоге: 6
12.02.2014, 15:10 9
RayPas, вряд ли проблема в операторе присваения. Приведите весь код пожайлуста. Созданный по умолчанию работает примеоно так как вы написали выше. Повторюсь нужен код.
0
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
12.02.2014, 15:13  [ТС] 10
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
#pragma once
 
namespace Program {
class Fraction
{
private:
    int m_Numerator;
    int m_Denominator;
    int R;
public:
    Fraction(void);
 
 
    int getNumerator() { return m_Numerator; }
    int getDenominator() { return m_Denominator; }
    void setFraction();
    void ShowFraction() const;
    void Fraction :: Control(int &denominator, int  &numerator);
    
    Fraction operator= (const Fraction &a);
    Fraction operator * (const Fraction &a);
    ~Fraction(void);
};
}


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
48
49
50
51
52
53
54
#include "stdafx.h"
#include "Fraction.h"
#include <iostream>
 
using namespace std;
 
namespace Program {
 
Fraction::Fraction(void)
{
}
 
 
Fraction::~Fraction(void)
{
}
 
void Fraction :: setFraction()
     { int numerator;
        char c;
        int denominator;
        
        
        cin >> numerator;
        cin >> c;
        cin >> denominator;
        m_Numerator = numerator;
        m_Denominator = denominator;
}
 
 Fraction Fraction :: operator* (const Fraction &a) {
    Fraction tmp; //результат умножения двух дробей
    tmp.m_Numerator = m_Numerator*a.m_Numerator;
    tmp.m_Denominator = m_Denominator*a.m_Denominator;
    return tmp;
};
 
// Fraction Fraction :: operator= (const Fraction &a) {
    // R = a.R;
     //return *this;
// }
 
void Fraction :: ShowFraction() const {
    cout << this -> m_Numerator << '/' << this -> m_Denominator << endl;
}
 
 
void Fraction :: Control(int &denominator, int  &numerator) {
     if (denominator == 0) {cout << "error!try again!"<<endl;}
     if (numerator % denominator != 0) {cout << "error!try again!"<<endl;}
}
 
 
}

ну и главная часть такая же, как выше написал
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2208 / 1413 / 411
Регистрация: 16.05.2013
Сообщений: 3,600
Записей в блоге: 6
12.02.2014, 15:24 11
А вы указали, что используете свое пространство имен?
C++
1
using namespace Program;
1
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
12.02.2014, 15:27 12
C++
1
2
3
4
5
 Fraction& Fraction :: operator= (const Fraction &a) {
     m_Numerator= a.m_Numerator;
     m_Denominator=a.m_Denominator;
     return *this;
 }
прототип подправьте тоже
0
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
12.02.2014, 15:28  [ТС] 13
Цитата Сообщение от Ilot Посмотреть сообщение
А вы указали, что используете свое пространство имен?
C++
1
using namespace Program;
да, только таким образом
C++
1
using Program:: Fraction;
и хмм, он заработал!!!
Но! Получается, что R нельзя определять как объект класса, потому что при введении дробей в R забивается мусор, и при отладке он выводит этот мусор через разделенную черту дроби...как быть?
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
12.02.2014, 15:30 14

Не по теме:

Цитата Сообщение от dzrkot Посмотреть сообщение
Код C++
Fraction R();
R.парамерты=a.параметры
return R;
//примерно так
глупость я написал походу сначала)



Добавлено через 1 минуту
Цитата Сообщение от RayPas Посмотреть сообщение
Но! Получается, что R нельзя определять как объект класса, потому что при введении дробей в R забивается мусор, и при отладке он выводит этот мусор через разделенную черту дроби...как быть?
я выше отписал, поправьте перегрузку=, у меня всё заработало с тем что выше
1
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
12.02.2014, 15:31  [ТС] 15
dzrkot, спасиб друг!) и, правда, все заработало!)
ох ты ж и это только умножение...самое легкое!)
просто, про перегрузку оператора присваивания, вообще не знал, классы буквально вчера начал изучать.
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2208 / 1413 / 411
Регистрация: 16.05.2013
Сообщений: 3,600
Записей в блоге: 6
12.02.2014, 15:32 16
Вы R не инициализируете вообще. Вводите какую-то с...
0
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
12.02.2014, 15:34  [ТС] 17
какое -то c это чаровский символ для имитации дроби, а R собсно переменная для реза...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2014, 15:34
Помогаю со студенческими работами здесь

Ошибка error LNK2019: ссылка на неразрешенный внешний символ
Здравствуйте, не уверен в эту ли тему пишу, но в теме специализированой по OpenGL мне ни кто ничего не сказал( Так вот, начал разбираться с...

Ошибка error LNK2019: ссылка на неразрешенный внешний символ
Здравствуйте! Помогите пожалуйста! Компоновщик выдаёт ошибку error LNK2019: ссылка на неразрешенный внешний символ &quot;class...

Ошибка линковки - error LNK2019: ссылка на неразрешенный внешний символ
Что может быть не так? есть файл test.h #ifndef _T_ #define _T_ template&lt;class T&gt; class test { //.... };

Переопределение операции. Ошибка Error LNK2019: ссылка на неразрешенный внешний символ
Возникает такая ошибка: 1 error LNK2019: ссылка на неразрешенный внешний символ &quot;public: class three __thiscall three::operator=(class...

Не могу разобраться где ошибка!error LNK2019: ссылка на неразрешенный внешний символ
#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;stdio.h&quot; #include &quot;stdlib.h&quot; #include &quot;string.h&quot; #include &quot;math.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

Новые блоги и статьи
Циклы for в Python
py-thonny 17.03.2025
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем. . .
Предсказание ветвлений - путь к высокопроизводи­тельному C++
NullReferenced 17.03.2025
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых. . .
Паттерн CQRS в C#
UnmanagedCoder 17.03.2025
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,. . .
Паттерн Цепочка ответственности в C#
UnmanagedCoder 17.03.2025
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос. . . .
Создаем микросервисы с NestJS, TCP и Typescript
run.dev 17.03.2025
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node. js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает. . .
Гексагональная архитектура со Spring Boot
Javaican 17.03.2025
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность. . .
Позиционировани­е Kafka Consumer и Seek-операции
Javaican 17.03.2025
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого. . .
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru