Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
12.02.2014, 14:29     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #1
Код:

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: ссылка на неразрешенный внешний символ..."
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2014, 14:29     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ
Посмотрите здесь:

Не могу разобраться где ошибка!error LNK2019: ссылка на неразрешенный внешний символ C++
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ C++
Ошибка линковщика(error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup) C++
C++ Структуры/Работа с файлами(ошибка линковщика error LNK2019: ссылка на неразрешенный внешний символ)
Ошибка линковки - error LNK2019: ссылка на неразрешенный внешний символ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
12.02.2014, 14:32     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #2
А вы в аргументе перегруженного оператора принимайте ссылку, то есть:
C++
1
Fraction Fraction :: operator* (const Fraction a) {
заменить на
C++
1
Fraction Fraction :: operator* (const Fraction &a) {
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
12.02.2014, 14:33     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #3
по-моему из-за того что оператор= не перегружен
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
12.02.2014, 14:44  [ТС]     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #4
Цитата Сообщение от dzrkot Посмотреть сообщение
по-моему из-за того что оператор= не перегружен
вы имеете в виду оператор присваивание нужно перегрузить?

Добавлено через 20 секунд
Цитата Сообщение от ShadowFirst Посмотреть сообщение
А вы в аргументе перегруженного оператора принимайте ссылку, то есть:
C++
1
Fraction Fraction :: operator* (const Fraction a) {
заменить на
C++
1
Fraction Fraction :: operator* (const Fraction &a) {
не сработало
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
12.02.2014, 14:45     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #5
Цитата Сообщение от RayPas Посмотреть сообщение
вы имеете в виду оператор присваивание нужно перегрузить?
именно
вообще если выложите весь код то будет проще)
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
12.02.2014, 14:45     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #6
Кстати да, = тож нужно перегрузить, как то не подумал об этом сразу.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
12.02.2014, 15:02  [ТС]     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #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 - проект строится без ошибок
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
12.02.2014, 15:06     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #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; 
//примерно так
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
12.02.2014, 15:10     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #9
RayPas, вряд ли проблема в операторе присваения. Приведите весь код пожайлуста. Созданный по умолчанию работает примеоно так как вы написали выше. Повторюсь нужен код.
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
12.02.2014, 15:13  [ТС]     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #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;}
}
 
 
}

ну и главная часть такая же, как выше написал
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
12.02.2014, 15:24     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #11
А вы указали, что используете свое пространство имен?
C++
1
using namespace Program;
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
12.02.2014, 15:27     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #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;
 }
прототип подправьте тоже
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
12.02.2014, 15:28  [ТС]     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #13
Цитата Сообщение от Ilot Посмотреть сообщение
А вы указали, что используете свое пространство имен?
C++
1
using namespace Program;
да, только таким образом
C++
1
using Program:: Fraction;
и хмм, он заработал!!!
Но! Получается, что R нельзя определять как объект класса, потому что при введении дробей в R забивается мусор, и при отладке он выводит этот мусор через разделенную черту дроби...как быть?
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
12.02.2014, 15:30     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #14

Не по теме:

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



Добавлено через 1 минуту
Цитата Сообщение от RayPas Посмотреть сообщение
Но! Получается, что R нельзя определять как объект класса, потому что при введении дробей в R забивается мусор, и при отладке он выводит этот мусор через разделенную черту дроби...как быть?
я выше отписал, поправьте перегрузку=, у меня всё заработало с тем что выше
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
12.02.2014, 15:31  [ТС]     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #15
dzrkot, спасиб друг!) и, правда, все заработало!)
ох ты ж и это только умножение...самое легкое!)
просто, про перегрузку оператора присваивания, вообще не знал, классы буквально вчера начал изучать.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
12.02.2014, 15:32     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #16
Вы R не инициализируете вообще. Вводите какую-то с...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2014, 15:34     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ
Еще ссылки по теме:

Ошибка error LNK2019: ссылка на неразрешенный внешний символ C++
C++ Переопределение операции. Ошибка Error LNK2019: ссылка на неразрешенный внешний символ
C++ Ошибка при работе со структурами: error LNK2019: ссылка на неразрешенный внешний символ _main

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

Или воспользуйтесь поиском по форуму:
RayPas
 Аватар для RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 367
12.02.2014, 15:34  [ТС]     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ #17
какое -то c это чаровский символ для имитации дроби, а R собсно переменная для реза...
Yandex
Объявления
12.02.2014, 15:34     Ошибка при написании класса: error LNK2019: ссылка на неразрешенный внешний символ
Ответ Создать тему
Опции темы

Текущее время: 23:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru