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

Unresolved externals в ооп - C++

Войти
Регистрация
Восстановить пароль
 
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
27.05.2014, 23:56     Unresolved externals в ооп #1
Добрый день, переделывал конструкторы в одной лабе, вроде все сделал, но теперь выдает две ошибки 2019 и соответственно одну 1120. Не могу найти, не поможете? Буду очень признателен.
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <iostream>
#include <fstream>
#pragma warning(disable : 4996)
class vectr{
    int *v;
    int vlength;
public:
    vectr(); // дефолтный конструктор для возможности создания массива
    vectr(int vlength);
    int& operator[](int i);
    vectr operator+(vectr &t);
    vectr operator=(vectr &t);
    friend ostream& operator<<(ostream& as, vectr& u);
};
vectr::vectr(int vlength)
{ // n - это количество векторов, а count - количество цифр в векторе
    v = new int[vlength];
}
int& vectr::operator[](int i)
{
    return v[i];
}
vectr vectr::operator+(vectr &t)
{
    vectr temp;
    for (int i = 0; i < vlength; i++)
        temp.v[i] = v[i] + t.v[i];
    return temp;
}
vectr vectr::operator=(vectr &t)
{
    for (int i = 0; i < vlength; i++)
        v[i] = t.v[i];
    return *this;
}
 
ostream& operator<<(ostream& as, vectr& u)
{
    for (int i = 0; i < u.vlength; i++)
        as << u.v[i] << " ";
    cout << endl;
    return as;
}
 
class matrix : private vectr
{
    vectr v;
    vectr *b;
public:
    int n; int vlength;
    matrix();
    matrix(int n, int vlength);
    void entervalue()
    {
        for (int j = 0; j < n; j++) {
            cout << "entering new vector" << endl;
            for (int i = 0; i < vlength; i++)
            {
                cin >> v[i];
                b[j] = v;
            }
        }
 
        cout << endl;
        for (int i = 0; i < n; i++)
            cout << b[i];
    }
    matrix operator+(matrix &t);
    matrix operator=(matrix &t);
    vectr& operator[](int i);
    friend ostream& operator<<(ostream& as, matrix& u);
};
matrix::matrix(int n, int vlength)
{
    b = new vectr[n];
}
matrix matrix::operator=(matrix &t)
{
    for (int i = 0; i < n; i++)
        b[i] = t.b[i];
    return *this;
}
matrix matrix::operator+(matrix &t)
{
    matrix temp;
    for (int i = 0; i < n; i++)
        temp.b[i] = b[i] + t.b[i];
    return temp;
}
vectr& matrix::operator[](int i)
{
    return b[i];
}
 
ostream& operator<<(ostream& as, matrix& u)
{
    cout << endl;
    for (int i = 0; i < u.n; i++)
        as << u.b[i];
    return as;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n;
    int vlength; // длина вектора
    cout << "enter number of vectors" << endl;
    cin >> n;
    cout << "enter length of vector" << endl;
    cin >> vlength;
    // сделаем матрицу векторов.
    matrix Mt(n, vlength);
    Mt.entervalue();
    cout << "testing << operator for matrix class";
    cout << Mt;
    cout << "testing = operator for matrix class";
    matrix testm(n, vlength);
    cout << "enter second matrix" << endl;
    testm.entervalue();
    Mt = testm;
    cout << Mt;
    cout << "now testing + operator" << endl;
    testm = Mt + Mt;
    cout << testm;
    return 0; // переделать для работы с шаблонами
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12288 / 6975 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
28.05.2014, 00:01     Unresolved externals в ооп #2
Цитата Сообщение от Newchap Посмотреть сообщение
Не могу найти
компилятор пишет же что не так
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
28.05.2014, 00:09  [ТС]     Unresolved externals в ооп #3
Croessmah, Вот что пишет компилятор. Я пробовал понять в чем дело, но недопер. Не могли бы подсказать? просто ничего не менял кроме конструкторов
1)
Error 1 error LNK2019: unresolved external symbol "public: __thiscall vectr::vectr(void)" (??0vectr@@QAE@XZ) referenced in function "public: __thiscall matrix::matrix(int,int)" (??0matrix@@QAE@HH@Z) C:\Users\User\Desktop\Документы\учеба\программирование\ООП\Lab3\oop3\ConsoleApplication1\ConsoleApplication1.obj ConsoleApplication1

2)
Error 2 error LNK2019: unresolved external symbol "public: __thiscall matrix::matrix(void)" (??0matrix@@QAE@XZ) referenced in function "public: class matrix __thiscall matrix::operator+(class matrix &)" (??Hmatrix@@QAE?AV0@AAV0@@Z) C:\Users\User\Desktop\Документы\учеба\программирование\ООП\Lab3\oop3\ConsoleApplication1\ConsoleApplication1.obj ConsoleApplication1
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.05.2014, 00:19     Unresolved externals в ооп #4
Нет реализаций конструкторов по умолчанию.
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
28.05.2014, 00:21  [ТС]     Unresolved externals в ооп #5
alsav22, Вы не могли бы по-подробнее?
Честно не врубаюсь
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.05.2014, 00:22     Unresolved externals в ооп #6
Цитата Сообщение от Newchap Посмотреть сообщение
vectr(); // дефолтный конструктор для возможности создания массива
Прототип есть - реализации нет.
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
28.05.2014, 00:27  [ТС]     Unresolved externals в ооп #7
alsav22, Окей, понял.
Только теперь вопрос, как её сделать, вернее, что там должно быть? Я её написал, чтобы была возможность создать массив, ошибку выдавать перестало, но возникла эта проблема с unresolved externals

Добавлено через 1 минуту
вообще, наугад прописав
C++
1
vectr(); {}
ошибка прошла, одна из, только почему? Ничего не понимаю
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.05.2014, 00:41     Unresolved externals в ооп #8
Цитата Сообщение от Newchap Посмотреть сообщение
ошибка прошла, одна из, только почему? Ничего не понимаю
Цитата Сообщение от alsav22 Посмотреть сообщение
Нет реализаций конструкторов по умолчанию.
Текст ошибки смотрите, там же написано чего ещё нет.
Цитата Сообщение от Newchap Посмотреть сообщение
matrix::matrix(void)
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
28.05.2014, 00:44  [ТС]     Unresolved externals в ооп #9
alsav22, смотрю, но честно не вижу в чем дело.
не могли бы привести пример как это исправить?
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.05.2014, 00:51     Unresolved externals в ооп #10
Цитата Сообщение от Newchap Посмотреть сообщение
matrix();
...
Цитата Сообщение от alsav22 Посмотреть сообщение
Прототип есть - реализации нет.
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
28.05.2014, 00:53  [ТС]     Unresolved externals в ооп #11
alsav22, Да я понял, что реализации нет.
Я просто не понимаю что можно в данном конструкторе по умолчанию реализовать, чтобы прога работала.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12288 / 6975 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
28.05.2014, 02:06     Unresolved externals в ооп #12
Цитата Сообщение от Newchap Посмотреть сообщение
Я просто не понимаю что можно в данном конструкторе по умолчанию реализовать, чтобы прога работала.
Можете там написать код проигрывания порно, например
Мы то откуда знаем че Вы там затеяли?
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
28.05.2014, 08:36  [ТС]     Unresolved externals в ооп #13
Croessmah, Идея собственно была такая, есть класс вектор, есть класс матрица.
Матрица - массив векторов. И есть два конструктора, один с параметрами, другой пустой(с которым проблема).
Параметрический конструктор работает, а пустой конструктор используется для создания массивов
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5534 / 2568 / 234
Регистрация: 01.11.2011
Сообщений: 6,346
Завершенные тесты: 1
28.05.2014, 09:29     Unresolved externals в ооп #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class vectr{
    int *v;
    int vlength;
public:
    vectr(); // дефолтный конструктор для возможности создания массива
    vectr(int vlength);
    int& operator[](int i);
    vectr operator+(vectr &t);
    vectr operator=(vectr &t);
    friend ostream& operator<<(ostream& as, vectr& u);
};
vectr::vectr()
{ 
    v = NULL;
}
vectr::vectr(int vlength)
{ // n - это количество векторов, а count - количество цифр в векторе
    v = new int[vlength];
}
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
28.05.2014, 16:24  [ТС]     Unresolved externals в ооп #15
SatanaXIII, Собственно сделал как вы сказали, аналогично для класса матрица.
Только какой-то странный результат. Прога компилится, но не выполняет действий. Т.е. надписи выводит, а вот сами действия не рабочие.
Croessmah,

Добавлено через 56 минут
Вопрос на паузе)

Добавлено через 33 минуты
Исправил это дело, только теперь при запуске функции enterarray повисает. Также, во время заполнения вектора заполняет только четные числа, нечетные почему-то пропускает. От чего вообще не знаю. Помогите плиз
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <iostream>
#include <fstream>
#pragma warning(disable : 4996)
class vectr{
    int *v;
    int vlength;
public:
    vectr(); // дефолтный конструктор для возможности создания массива
    vectr(int vlength);
 
    int& operator[](int i);
    vectr operator+(vectr &t);
    vectr operator=(vectr &t);
    friend ostream& operator<<(ostream& as, vectr& u);
};
vectr::vectr(int vlength2)
{ // n - это количество векторов, а count - количество цифр в векторе
    vlength = vlength2;
    cout << vlength << endl << vlength2<<endl;
     v = new int[vlength];
}
vectr::vectr()
{ // n - это количество векторов, а count - количество цифр в векторе
    v = NULL;
}
int& vectr::operator[](int i)
{
    return v[i];
}
vectr vectr::operator+(vectr &t)
{
    vectr temp;
    for (int i = 0; i < vlength; i++)
        temp.v[i] = v[i] + t.v[i];
    return temp;
}
vectr vectr::operator=(vectr &t)
{
    for (int i = 0; i < vlength; i++)
        v[i] = t.v[i];
    return *this;
}
 
ostream& operator<<(ostream& as, vectr& u)
{
    for (int i = 0; i < u.vlength; i++)
        as << u.v[i]<<" ";
    cout << endl;
    return as;
}
 
class matrix : private vectr
{
    vectr v;
    vectr *b;
public:
    int n; int vlength;
    matrix();
    matrix(int n2, int vlength2);
    void entervalue()
    {
        for (int j = 0; j < n; j++) {
            cout << "entering new vector" << endl;
            for (int i = 0; i < vlength; i++)
            {
                cin >> v[i];
                b[j] = v; 
            }
        }
 
        cout << endl;
        for (int i = 0; i < n; i++)
            cout << b[i];
    }
 
    matrix operator+(matrix &t);
    matrix operator=(matrix &t);
    vectr& operator[](int i);
    friend ostream& operator<<(ostream& as, matrix& u);
};
matrix::matrix(int n2, int vlength2)
{   
    n = n2; vlength = vlength2;
b = new vectr[n];
}
matrix::matrix()
{
    b = 0;
}
matrix matrix::operator=(matrix &t)
{
    for (int i = 0; i < n; i++)
        b[i] = t.b[i];
    return *this;
}
matrix matrix::operator+(matrix &t)
{
    matrix temp;
    for (int i = 0; i < n; i++)
        temp.b[i] = b[i] + t.b[i];
    return temp;
}
vectr& matrix::operator[](int i)
{
    return b[i];
}
 
ostream& operator<<(ostream& as, matrix& u)
{
    cout << endl;
    for (int i = 0; i < u.n; i++)
        as << u.b[i];
    return as;
}
 
int _tmain(int argc, _TCHAR* argv[])
{ 
int n;
int vlength; // длина вектора
    cout << "enter number of vectors" << endl;
 cin >> n;
 cout << "enter length of vector" << endl;
 cin >> vlength;
 cout << "testing vectr class" << endl;
 vectr v2(vlength);
 for (int i = 0; i < vlength; i++)
     v2[i] = i++;
 for (int i = 0; i < vlength; i++)
 cout << v2[i]<<" ";
    // сделаем матрицу векторов.
    matrix Mt(n,vlength);
    Mt.entervalue();
    cout << "testing << operator for matrix class";
    cout << Mt;
    cout << "testing = operator for matrix class";
    matrix testm(n, vlength);
    cout << "enter second matrix"<<endl;
    testm.entervalue();
    Mt = testm;
    cout << Mt;
    cout << "now testing + operator" << endl;
        testm = Mt + Mt;
        cout << testm;
    return 0; // переделать для работы с шаблонами
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2014, 16:44     Unresolved externals в ооп
Еще ссылки по теме:

C++ unresolved external symbol
C++ Unresolved externals
Ошибка LNK1120: 4 unresolved externals C++
C++ Unresolved external symbol
Unresolved external symbol C++

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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5534 / 2568 / 234
Регистрация: 01.11.2011
Сообщений: 6,346
Завершенные тесты: 1
28.05.2014, 16:44     Unresolved externals в ооп #16
Ох.
C++
22
23
24
25
vectr::vectr(int vlength) // Передали сколько элементов требуется создать
{ 
     v = new int[vlength]; // Выделили память
}
В конструктор с параметром вы передаете количество элементов в векторе. Внутри конструктора, оператором new выделяется память под них.

C++
1
2
3
4
vectr::vectr() // Ничего не передаете
{ 
    v = NULL; // Следовательно вектор пуст
}
В конструктор без параметров ничего не передается. Он создает пустой вектор, в котором ноль элементов. Но, чтобы как-то просигнализировать об этом, нужно занулить указатель.

Далее в коде вы должны будете проверить указатель на равенство нулю и в зависимости от этого уже действовать. К примеру нельзя обратиться к элементу пустого вектора. Логично? Следовательно надо предварительно почти в каждом методе проверять пуст ли вектор.
Yandex
Объявления
28.05.2014, 16:44     Unresolved externals в ооп
Ответ Создать тему
Опции темы

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