i just built a template implementation of my boost network.
here is my template class who is calling my network class :
AbstractNetwork.hpp :
#include "Network.hpp"
template <typename T, typename R, typename S, typename A>
class AbstractNetwork
{
private:
T connection;
public:
AbstractNetwork(A acceptor)
{
connection = T::create(acceptor);
}
void write(const R msg)
{
connection->Swrite(msg);
}
R read(void)
{
connection->Sread();
return (connection->getIdata());
}
S getSocket(void)
{
return (connection->getSocket());
}
void close(void)
{
connection->close();
}
};
and this is my network class who is working with a boost::tcp::socket :
Network.hpp
class Network : public boost::enable_shared_from_this<Network>
{
private:
tcp::socket socket;
std::vector<char> Idata;
char Iheader[MYINT];
bool readHeader;
void endRead(const error_code& error, size_t nbytes);
void endWrite(const error_code &error);
size_t Isize;
public:
typedef boost::shared_ptr<Network> ptr;
Network(io_service &);
~Network();
void close(void);
void Sread(void);
void Swrite(Commande *);
tcp::socket& getSocket(void);
Commande* getIdata(void);
std::string convertHeader(void);
static ptr create(io_service &);
};
i don’t give all of function’s code because it’s too long and i’m sure it works.
When i build this project i have this following error under VS2010 ultimate :
error LNK2001: unresolved external symbol "public: void __thiscall AbstractNetwork<class boost::shared_ptr<class Network>,struct Commande *,class boost::asio::basic_stream_socket<class boost::asio::ip::tcp,class boost::asio::stream_socket_service<class boost::asio::ip::tcp> > &,class boost::asio::io_service &>::close(void)"
error LNK2001: unresolved external symbol "public: void __thiscall AbstractNetwork<class boost::shared_ptr<class Network>,struct Commande *,class boost::asio::basic_stream_socket<class boost::asio::ip::tcp,class boost::asio::stream_socket_service<class boost::asio::ip::tcp> > &,class boost::asio::io_service &>::write(struct Commande * const)"
error LNK2001: unresolved external symbol "public: class boost::asio::basic_stream_socket<class boost::asio::ip::tcp,class boost::asio::stream_socket_service<class boost::asio::ip::tcp> > & __thiscall AbstractNetwork<class boost::shared_ptr<class Network>,struct Commande *,class boost::asio::basic_stream_socket<class boost::asio::ip::tcp,class boost::asio::stream_socket_service<classboost::asio::ip::tcp> > &,class boost::asio::io_service &>::getSocket(void)"
error LNK2001: unresolved external symbol "public: __thiscall AbstractNetwork<class boost::shared_ptr<class Network>,struct Commande *,class boost::asio::basic_stream_socket<class boost::asio::ip::tcp,class boost::asio::stream_socket_service<class boost::asio::ip::tcp> > &,class boost::asio::io_service &>::AbstractNetwork<class boost::shared_ptr<class Network>,struct Commande *,classboost::asio::basic_stream_socket<class boost::asio::ip::tcp,class boost::asio::stream_socket_service<class boost::asio::ip::tcp> > &,class boost::asio::io_service &>(class boost::asio::io_service &)
it’s long, but i want to give you all of these error because i think the problem come to my template type. so i think my problem come to AbstractNetwork.hpp but i can’t find this.
Did you have any idea about that ?
Fix your class. You don’t need to repeat the template for each class member function, they’re part of the template class already.
Apart from the apparent typo in
close, you also don’t need to usethiseverywhere, its redundant and makes the code look messier.