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

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

Восстановить пароль Регистрация
 
Yacudzer
3 / 3 / 2
Регистрация: 06.07.2012
Сообщений: 107
14.07.2013, 22:27     Пегерузка operator<< или свое универсальное исключение #1
Пытаюсь создать свой класс исключений:
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 такая же беда. Что-то я намудрил с шаблонами.
Не могу понять, где собака порылась. Подскажите плз.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2013, 22:27     Пегерузка operator<< или свое универсальное исключение
Посмотрите здесь:

C++ operator
C++ Статический пул для класса с помошью class::operator new непонятное исключение?
дискретка и С++.универсальное множество C++
operator char() или operator int() C++
C++ Expected init-declarator before "operator".expected `,' or `;' before "operator"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
14.07.2013, 23:30     Пегерузка operator<< или свое универсальное исключение #2
оператор << надо френдить, а если я ничего не путаю ф-ции друзья, не шаблонятся
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.07.2013, 23:59     Пегерузка operator<< или свое универсальное исключение #3
aLarman, Не надо. Шаблоняться.
Yacudzer
3 / 3 / 2
Регистрация: 06.07.2012
Сообщений: 107
15.07.2013, 06:16  [ТС]     Пегерузка operator<< или свое универсальное исключение #4
aLarman, а воодушевила меня вот эта статья http://habrahabr.ru/post/60666/, и я у себя примерно так же как в ней сделал.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.07.2013, 06:45     Пегерузка operator<< или свое универсальное исключение #5
Реализации с классом в одном файле?
Yacudzer
3 / 3 / 2
Регистрация: 06.07.2012
Сообщений: 107
15.07.2013, 08:27  [ТС]     Пегерузка operator<< или свое универсальное исключение #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Реализации с классом в одном файле?
Нет, в разных. Сам класс в .h, реализация в .cpp
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
15.07.2013, 09:06     Пегерузка operator<< или свое универсальное исключение #7
Цитата Сообщение от Yacudzer Посмотреть сообщение
Нет, в разных. Сам класс в .h, реализация в .cpp
Код шаблона должен быть доступен для инстанцирования. Делайте всё в одном файле
aLarman
15.07.2013, 10:58
  #8

Не по теме:

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

Yacudzer
3 / 3 / 2
Регистрация: 06.07.2012
Сообщений: 107
26.07.2013, 16:53  [ТС]     Пегерузка operator<< или свое универсальное исключение #9
Цитата Сообщение от Croessmah Посмотреть сообщение
Код шаблона должен быть доступен для инстанцирования. Делайте всё в одном файле
В хедере (.h) ??? Если так, то в одном файле писать только шаблонизированный метод или весь класс??
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.07.2013, 17:01     Пегерузка operator<< или свое универсальное исключение #10
Yacudzer, Шаблонные функции должны быть в хидере. Остальные в .cpp.
Tulosba
26.07.2013, 17:07
  #11

Не по теме:

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

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 17:16     Пегерузка operator<< или свое универсальное исключение #12
Вот это:
Цитата Сообщение от Yacudzer Посмотреть сообщение
или весь класс??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2013, 17:22     Пегерузка operator<< или свое универсальное исключение
Еще ссылки по теме:

Универсальное приложение, одинаково воспринимаемое C++ Borland и Visual C++ в Windows, и GCC в Linux C++
Реализация operator + через operator += C++
Свое API C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.07.2013, 17:22     Пегерузка operator<< или свое универсальное исключение #13
Tulosba, ну мелкие стоит оставить, да
Yandex
Объявления
26.07.2013, 17:22     Пегерузка operator<< или свое универсальное исключение
Ответ Создать тему
Опции темы

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