С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Yacudzer
4 / 4 / 2
Регистрация: 06.07.2012
Сообщений: 125
#1

Пегерузка operator<< или свое универсальное исключение - C++

14.07.2013, 22:27. Просмотров 523. Ответов 12
Метки нет (Все метки)

Пытаюсь создать свой класс исключений:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class YacException :
    public exception
{
private:
    tLog log;
    int messageLevel;
    string message;
    string deli;
 
    void AddDeli(void);
public:
    YacException(tLog _log=NULL,int _msglvl=1) throw();
    virtual ~YacException(void) throw();
    virtual const char* what() const throw();
    template <class T>
        YacException& operator<<(const T& _msg) throw();
};
Кусок реализации класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <class T>
YacException& YacException::operator<<(const T& _msg)
{
    AddDeli();
    message += _msg;
    return *this;
}
 
void YacException::AddDeli(void)
{
    if (message !="") message += deli;
}
ну и дальше пытаюсь бросить исключение вот так:
C++
1
2
3
    int initResult = WSAStartup (0x0202,&WsaData);
    if (initResult)
        throw YacException(_log) << "ошибка инициализации сокетов"<<initResult;
Однако компилятор выдает такую вот хрень:
Код
TCPLink.obj : error LNK2019: unresolved external symbol "public: class YacException & __thiscall YacException::operator<<<char const [23]>(char const (&)[23])"
.....
И по поводу int такая же беда. Что-то я намудрил с шаблонами.
Не могу понять, где собака порылась. Подскажите плз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2013, 22:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пегерузка operator<< или свое универсальное исключение (C++):

operator char() или operator int() - C++
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он описывает класс String в нем есть ...

Статический пул для класса с помошью class::operator new непонятное исключение? - C++
Привет всем! Пытаюсь организовать статический пул(молниеносный аллокатор памяти. ) для некоторого класса. Написал сравнительный тест...

Class & operator's |Error: undefined reference to operator - C++
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to 'operator..(Fraction const&amp;, Fraction...

Вызов operator[] через operator[] const - C++
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный вариант кода, не проще сделать как...

Реализация operator + через operator += - C++
внутри следующей темы возник вопрос, ответ на который так и не был получен: ...

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число" - C++
Здравствуйте. Предлагаю заняться арифметикой. Создал прослейший класс, перегрузил операторы сложения и умножения, в конструкторе...

12
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
14.07.2013, 23:30 #2
оператор << надо френдить, а если я ничего не путаю ф-ции друзья, не шаблонятся
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
14.07.2013, 23:59 #3
aLarman, Не надо. Шаблоняться.
0
Yacudzer
4 / 4 / 2
Регистрация: 06.07.2012
Сообщений: 125
15.07.2013, 06:16  [ТС] #4
aLarman, а воодушевила меня вот эта статья http://habrahabr.ru/post/60666/, и я у себя примерно так же как в ней сделал.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.07.2013, 06:45 #5
Реализации с классом в одном файле?
0
Yacudzer
4 / 4 / 2
Регистрация: 06.07.2012
Сообщений: 125
15.07.2013, 08:27  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Реализации с классом в одном файле?
Нет, в разных. Сам класс в .h, реализация в .cpp
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
15.07.2013, 09:06 #7
Цитата Сообщение от Yacudzer Посмотреть сообщение
Нет, в разных. Сам класс в .h, реализация в .cpp
Код шаблона должен быть доступен для инстанцирования. Делайте всё в одном файле
0
aLarman
15.07.2013, 10:58
  #8

Не по теме:

да.. что то я не то сказал, обчитался недавно стандарта от 2003г, по шаблонам, такая каша сейчас в голове

0
Yacudzer
4 / 4 / 2
Регистрация: 06.07.2012
Сообщений: 125
26.07.2013, 16:53  [ТС] #9
Цитата Сообщение от Croessmah Посмотреть сообщение
Код шаблона должен быть доступен для инстанцирования. Делайте всё в одном файле
В хедере (.h) ??? Если так, то в одном файле писать только шаблонизированный метод или весь класс??
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.07.2013, 17:01 #10
Yacudzer, Шаблонные функции должны быть в хидере. Остальные в .cpp.
0
Tulosba
26.07.2013, 17:07
  #11

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Остальные в .cpp.
а как же неявные inline-функции?

0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 17:16 #12
Вот это:
Цитата Сообщение от Yacudzer Посмотреть сообщение
или весь класс??
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.07.2013, 17:22 #13
Tulosba, ну мелкие стоит оставить, да
0
26.07.2013, 17:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2013, 17:22
Привет! Вот еще темы с ответами:

Универсальное хэширование - C++
Помогите разобраться с алгоритмом хэширования. Задание построить таблицу идентификаторов Вариант 14. Реализовал, но потом понял что...

Универсальное деление на разряды - C++
Здравствуйте, нужна помощь с делением на разряды, цели: Нужно чтобы делилось 2-значное, 3-значное, 4-значное и т.д. Пробовал так: ...

Дискретка и С++: универсальное множество - C++
способ задачи универсального множества это целые числа {0....255} - в C++ это получается просто создание массива в данном диапазоне??если...

Operator +, operator += — какой через какой реализовывать? - C++
Для class Fraction { // ... public: Fraction operator + ( const Fraction&amp; right ) const; Fraction&amp; operator += ( const...


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

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

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