hell0w0rd
@hell0w0rd
Просто разработчик

Почему не работает перегрузка оператора?

В учебных целях пишу класс над sys/socket, для работы с сокетами, собственно.
https://github.com/nkt/cpp-socket/blob/master/src/... - вот метод.
https://github.com/nkt/cpp-socket/blob/master/chat... - вот его использование.

Xcode выдает
Undefined symbols for architecture x86_64:
  "Socket& operator<<<char const [16]>(Socket&, char const (&) [16])", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)


Причем вот такой пример совершенно нормально работает:
#include <iostream>
#include <string>

class test
{
public:
	void send(std::string str);
	template <class T>
    friend test &operator <<(test &tst, T &message);
};

void test::send(std::string str)
{
	std::cout << str;
}

template <class T>
test &operator <<(test &tst, T &message)
{
	tst.send(std::string(message));
	return tst;
}

int main()
{
	test t;

	t << "hello world!\n";
}
  • Вопрос задан
  • 2813 просмотров
Решения вопроса 1
bogolt
@bogolt
Шаблонные классы и методы нельзя определять в cpp файлах. Перенесите весь шаблонный код в заголовочный файл и все заработает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы