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

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

Войти
Регистрация
Восстановить пароль
 
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
#1

Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' - C++

01.08.2013, 22:19. Просмотров 415. Ответов 5
Метки нет (Все метки)

Есть такой файл complex.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef COMPLEX_H
#define COMPLEX_H
template<class Type> class complex{
public:
  Type Re;
  Type Im;
 
  complex(Type re = 0, Type im = 0):Re(re),Im(im){}
  complex(const complex<Type>&);
  Type GetRe();
  void SetRe(Type);
  Type GetIm();
  void SetIm(Type);
  void print();
  
};
#endif //COMPLEX_H
и файл complex.cpp
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
#include "complex.h"
#include <iostream>
using namespace std;
template<class Type> complex<Type>::complex(const complex<Type> &comp){
  Re = comp.Re;
  Im = comp.Im;
}
template<class Type> Type complex<Type>::GetRe(){
  return Re;
}
template<class Type> void complex<Type>::SetRe(Type re){
    Re = re;
}
template<class Type> Type complex<Type>::GetIm(){
  return Im;
}
template<class Type> void complex<Type>::SetIm(Type im){
  Im = im;
}
template<class Type> void complex<Type>::print(){
  if(Im>=0){
    cout<<Re<<"+"<<Im<<"i";
  }
  else
    cout<<Re<<Im<<"i";
}
При компиляции возникает ошибка:
g++ complex.o main.o -o prog -pipe
main.o: In function `main':
main.cpp:(.text+0x83): undefined reference to `complex<double>::SetRe(double)'

Я так понимаю, что компилятор не может найти определение функции SetRe() это может быть из-за того что я неправильно написал определение в complex.cpp но ошибки я не вижу. Подскажите в чем проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2013, 22:19     Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)'
Посмотрите здесь:

Перегрузка operator*(double, complex) - C++
У меня есть класс в нем 2 поля типа double, мне нужно сделать что бы можно так было сделать comple a(1.2,5.6); cout&lt;&lt;2 * a; не...

Шаблон класса. Ошибка `undefined reference` - C++
Доброго вечера. В следующем коде описывается незамысловатый шаблон. При разгрузке кода (т.е в 3 файла : main.cpp , chab.cpp , chab.h) ,...

Как заполнить массив комплексными числами, не используя стандартный класс std::complex<double>? - C++
Короче, дана структура. Как заполнить массив комплексными числами, не используя стандартный класс std::complex&lt;double&gt;. struct...

Как правильно сделать шаблон класса complex - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using std::cout; using std::cin; using std::endl; namespace Algebra ...

Undefined reference to `Vector::SetElem(int, double)'| - C++
Делал по методичке, но не могу понять, в чем проблема? в гугле что нашел это с названиями или подключаемыми файлами проблема. Но названия...

Перегрузка operator* у класса Complex - C++
Complex* Complex::operator*(const Complex&amp; other) const { Complex* product = this; *product *= other; return product; }...

Ошибка: undefined reference to при наследовании класса - C++
Здравствуйте форумчане. Пытаюсь наследовать класс MyService от OAuthService и получаю множество ошибок: Ошибка: undefined reference to...

Создать производный класс complexExt от класса Complex - C++
задание: Создать производный класс complexExt от класса Complex, который должен - в разделе private содержать закрытые переменные-члены...

Работа с классами: массив объектов класса Complex - C++
Здравствуйте,нужна помощь,не знаю,как из класса massiv передать значения (это 4 числа) для обработки в класс Complex.В классе massiv...

Ошибка: невозможно преобразовать 'double' в 'double' - C++
Задача алгоритма, мы вводим матрицу А и В матрицу А раскладываем в LU разложение и с его помощью находим обратную матрицу, а после находим...

Класс вектор на основе класса Complex. Найти угол между векторами - C++
класс вектор на основе класса комплекс найти кут между векторами...

Ошибка C4716 Complex<int>::operator+=: должна возвращать значение - C++
У меня vs 2015 c++. Необходимо создать шаблон класса для представления 2-х компонентных комплексных чисел и реализовать перегруженные...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
01.08.2013, 22:20     Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' #2
Объявление и реализацию шаблонного класса нужно писать в одном .hpp файле.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 22:20     Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' #3
В одном заголовке всё пишите
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
01.08.2013, 22:23  [ТС]     Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' #4
А это обязательно? а то как то странно получается для обычных классов два файла .cpp .h а для шаблонов только один
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
01.08.2013, 22:31     Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' #5
MAnton, в случае с шаблонами - обязательно.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 22:43     Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' #6
Цитата Сообщение от MAnton Посмотреть сообщение
обычных классов два файла .cpp .h а для шаблонов только один
А это и не класс - это только шаблон класса.
Как я уже говорил, чертеж дома есть, но дома то нет, пока его не построят.

Добавлено через 1 минуту
Цитата Сообщение от MAnton Посмотреть сообщение
А это обязательно?
можете хоть на 20 разделить, только поните, что код шаблона должен быть доступен в том месте, где будет инстанцирование


complex.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef COMPLEX_H
#define COMPLEX_H
template<class Type> class complex{
public:
  Type Re;
  Type Im;
 
  complex(Type re = 0, Type im = 0):Re(re),Im(im){}
  complex(const complex<Type>&);
  Type GetRe();
  void SetRe(Type);
  Type GetIm();
  void SetIm(Type);
  void print();
  
};
 
//!!!!!!!!!!!!!!!!!
#include "complex_impl"
 
#endif //COMPLEX_H
complex_impl
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
#include <iostream>
using namespace std;
template<class Type> complex<Type>::complex(const complex<Type> &comp){
  Re = comp.Re;
  Im = comp.Im;
}
template<class Type> Type complex<Type>::GetRe(){
  return Re;
}
template<class Type> void complex<Type>::SetRe(Type re){
    Re = re;
}
template<class Type> Type complex<Type>::GetIm(){
  return Im;
}
template<class Type> void complex<Type>::SetIm(Type im){
  Im = im;
}
template<class Type> void complex<Type>::print(){
  if(Im>=0){
    cout<<Re<<"+"<<Im<<"i";
  }
  else
    cout<<Re<<Im<<"i";
}
Yandex
Объявления
01.08.2013, 22:43     Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)'
Ответ Создать тему
Опции темы

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