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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
hrustash
3 / 3 / 1
Регистрация: 05.04.2013
Сообщений: 42
#1

unresolved external symbol - C++

05.04.2013, 16:33. Просмотров 460. Ответов 2
Метки нет (Все метки)

Добрый день.
Стоит задача разработать шаблонный класс комплексных чисел.
Одним из пунктов является решение квадратного уравнения с комплексными коэффициентами.
Написал я соответствующую функцию, но выкинуло мне ошибку
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 (C++):

Unresolved external symbol, unresolved token - C++
Всем привет. У меня тут такое дело: // learncpp.cpp : main project file. #include &quot;stdafx.h&quot; int main() { const int...

Unresolved external symbol - C++
Error 1 error LNK2001: unresolved external symbol &quot;class std::basic_ostream&lt;char,struct std::char_traits&lt;char&gt; &gt; &amp; __cdecl operator&lt;&lt;(class...

Unresolved external symbol - C++
Error 1 error LNK2001: unresolved external symbol &quot;public: void __thiscall Lab3::HashTable::addElement(char *,char *,float)&quot;...

Unresolved external symbol - C++
Main.cpp: #include &lt;iostream&gt; #include &quot;cone.h&quot; using namespace std; int main() { setlocale(LC_ALL, &quot;rus&quot;); float r,...

Unresolved external symbol - C++
policy.h #ifndef POLICY_H #define POLICY_H #include &lt;forward_list&gt; #include &quot;vector.h&quot; struct PolicyVector ...

Unresolved external symbol - C++
В общем, стандартная ошибка линкера: 5&gt;lib1.lib(a.obj) : error LNK2001: неразрешенный внешний символ &quot;_lol&quot; В a.c написана...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.04.2013, 17:07 #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  [ТС] #3
Цитата Сообщение от go Посмотреть сообщение
C++
1
2
template<typename U> // в самом классе
friend void roots (complex<U>&, complex<U>&, complex<U>&);
точно .___. спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 23:08
Привет! Вот еще темы с ответами:

Unresolved external symbol - C++
Читаю книгу по программированию в MFC, хоть она и 13летней давности В общем дошол до создания окна через Resource и создание класса для...

unresolved external symbol - C++
Доброе время собственно не понимаю почему компилатор ругается. Файлы : main.cpp #include &quot;Header.h&quot; #include &lt;stdio.h&gt; #include...

Unresolved external symbol - C++
header.h: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class CGraphicsObject { ...

Unresolved external symbol - C++
Чем больше я сталкиваюсь с этой ошибкой и чем больше решаю её, тем непонятнее она становится. Скопировал код из одного проекта VS в другой,...


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

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

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