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

unresolved external symbol - C++

Восстановить пароль Регистрация
 
hrustash
3 / 3 / 1
Регистрация: 05.04.2013
Сообщений: 42
05.04.2013, 16:33     unresolved external symbol #1
Добрый день.
Стоит задача разработать шаблонный класс комплексных чисел.
Одним из пунктов является решение квадратного уравнения с комплексными коэффициентами.
Написал я соответствующую функцию, но выкинуло мне ошибку
1>Source.obj : error LNK2019: unresolved external symbol "void __cdecl roots(class complex<double> &,class complex<double> &,class complex<double> &)" (?roots@@YAXAAV?$complex@N@@00@Z) referenced in function _main

прошу помощи, читал соответствующие форумы, MSDN - не разобрался.
вот код хедера, где определен класс и реализованы все его функции.

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
#pragma once
#include <iostream>
#include <Windows.h>
#include <cmath>
using namespace std;
 
template <class T> 
class complex
{
protected:
    T a;
    T b;
public:
    complex();
    complex(T, T);
    complex(const complex<T>&);
    ~complex();
    template <class T> friend ostream& operator << (ostream&, const complex<T>&);
    template <class T> friend istream& operator >> (istream&, complex<T>&);
    T GetRealPart() const;
    T GetImaginaryPart() const;
    complex<T> operator + (const complex<T>&);
    complex<T> operator - (const complex<T>&);
    complex<T> operator * (const complex<T>&);
    complex<T> operator * (T);
    complex<T> operator / (const complex<T>&);
    complex<T>& operator = (const complex<T>&);
    double GetModule();
    friend void roots (complex<T>&, complex<T>&, complex<T>&);
};
 
template <class T>
complex<T>::complex()
{
    a=0;
    b=0;
};
template <class T>
complex<T>::complex(T x, T y)
{
    a=x; b=y;
};
template <class T>
complex<T>::complex(const complex<T>& x)
{
    a=x.a;
    b=x.b;
};
template <class T>
complex<T>::~complex()
{
    cout<<"Destroying"<<endl;
}
template <class T>
T complex<T>::GetRealPart() const
{
    return a;
};
template <class T>
T complex<T>::GetImaginaryPart() const
{
    return b;
};
template <class T>
ostream& operator<<(ostream& out,const complex<T>& c)
{ 
    out<<"Число: "<<c.a;
    if(c.b>=0) out<<"+"<<c.b<<"i";
    else out<<c.b<<"i";
    return out;
}
template <class T>
istream& operator >> (istream& in, complex<T>& c) throw (const char*)
{
    cout<<"Введите действительную часть: ";
    in>>c.a;
    if (!in) throw "Invalid number!";
    cout<<"Введите мнимую часть: ";
    in>>c.b;
    if (!in) throw "Invalid number!";
    return in;
};
template <class T>
complex<T> complex<T>::operator + (const complex<T>& x)
{
    complex<T> temp;
    temp.a=this->a+x.a;
    temp.b=this->b+x.b;
    return temp;
};
template <class T>
complex<T> complex<T>::operator - (const complex<T>&x)
{
    complex<T> temp;
    temp.a=this->a-x.a;
    temp.b=this->b-x.b;
    return temp;
};
template <class T>
complex<T> complex<T>::operator * (const complex<T>& x)
{
    complex<T> temp;
    temp.a=this->a*x.a - this->b*x.b;
    temp.b=this->a*x.b + this->b*x.a;
    return temp;
};
template <class T>
complex<T> complex<T>::operator * (T x)
{
    complex<T> temp;
    temp.a=this->a*x;
    temp.b=this->b*x;
    return temp;
}
template <class T>
complex<T> complex<T>::operator / (const complex<T>& x) throw (const char*)
{
    if(x.a==0 && x.b==0) throw "НЕЛЬЗЯ ДЕЛИТЬ НА НОЛЬ";
    complex<T> temp;
    temp.a=(this->a*x.a + this->b*x.b)/(x.a*x.a+x.b*x.b);
    temp.b=(this->b*x.a - this->a*x.b)/(x.a*x.a+x.b*x.b);
    return temp;
}
template <class T>
complex<T>& complex<T>::operator = (const complex<T>& x) 
{
    if(this!=&x)
    {
        this->a=x.a;
        this->b=x.b;
    }
    return *this;
}
template <class T>
double complex<T>::GetModule()
{
    return (sqrt(a*a+b*b));
}
template <class T>
void roots(complex<T>& x, complex<T>& y, complex<T>& z)
{
    //x=a+bi, y=c+di, z=e+fi
    complex<T> D;
    D=y*y - (z*2)(y*2);
    T n, m;
    m=sqrt((sqrt(h*h+g*g)-h)/2);
    n=g/2*m;
    complex<T> sqrD (n, m);
    complex<T> root1=(sqrD-y)/x*0.5;
    complex<T> root2=(-sqrD-y)/x*0.5;   
}
соответственно, проблема с функцией "roots", а именно при ее вызове в main-е. без вызова компилируется успешно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2013, 16:33     unresolved external symbol
Посмотрите здесь:

Unresolved external symbol C++
C++ unresolved external symbol, unresolved token
C++ unresolved external symbol
Ошибка: unresolved external symbol C++
C++ unresolved external symbol
Unresolved external symbol C++
Unresolved external symbol C++
Unresolved external symbol C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.04.2013, 17:07     unresolved external symbol #2
C++
1
2
template<typename U> // в самом классе
friend void roots (complex<U>&, complex<U>&, complex<U>&);
hrustash
3 / 3 / 1
Регистрация: 05.04.2013
Сообщений: 42
05.04.2013, 23:08  [ТС]     unresolved external symbol #3
Цитата Сообщение от go Посмотреть сообщение
C++
1
2
template<typename U> // в самом классе
friend void roots (complex<U>&, complex<U>&, complex<U>&);
точно .___. спасибо!
Yandex
Объявления
05.04.2013, 23:08     unresolved external symbol
Ответ Создать тему
Опции темы

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