Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VS2010上带有模板实现的未解析外部符号_C++_Visual Studio 2010_Templates_Boost Asio_Shared Ptr - Fatal编程技术网

C++ VS2010上带有模板实现的未解析外部符号

C++ VS2010上带有模板实现的未解析外部符号,c++,visual-studio-2010,templates,boost-asio,shared-ptr,C++,Visual Studio 2010,Templates,Boost Asio,Shared Ptr,我刚刚构建了一个boost网络的模板实现 下面是调用我的网络类的模板类: AbstractNetwork.hpp : #include "Network.hpp" template <typename T, typename R, typename S, typename A> class AbstractNetwork { private: T connection; public: AbstractNetwork(A acceptor) {

我刚刚构建了一个boost网络的模板实现

下面是调用我的网络类的模板类:

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();
}
};
我并没有给出所有函数的代码,因为它太长了,而且我确信它可以工作

当我构建此项目时,在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 &)
它很长,但我想告诉你所有这些错误,因为我认为问题出在我的模板类型上。所以我想我的问题是AbstractNetwork.hpp,但我找不到这个


你对此有什么想法吗?

修改你的课程。您不需要为每个类成员函数重复模板,它们已经是模板类的一部分了

template <typename T, typename R, typename S, typename A>
class       AbstractNetwork
{
private:
    T       connection;

public:
AbstractNetwork(A acceptor)
{
    this->connection = T::create(acceptor);
}

void write(const R msg)
{
    this->connection->Swrite(msg);
}

read(void)
{
    this->connection->Sread();
    return (this->connection->getIdata());
}

getSocket(void)
{
    return (this->connection->getSocket());
}

close(void)
{
    this->close(); //  <<--- is this a mistake?
    //Probably you wanted this->connection->close();
}

};

除了近处明显的输入错误外,您也不需要在任何地方都使用它,因为它是多余的,使代码看起来更混乱。

您是否编写了包含这些方法实现的Network.cpp源代码文件?你把它添加到你的项目中了吗?链接器错误说你没有。是的,是的,我的项目中有一个Network.cpp,我没有给出这个,因为它太长了,我确信他在我的项目中,因为我在添加我的抽象网络之前编写并测试了这个。是的,是的,这是一个错误,对不起。我正在进行这些更正。现在出现以下错误:错误C2039:“创建”:不是“boost::shared_ptr”的成员,错误C3861:“创建”:标识符未找到您正在以T的形式传递一个类,该类未实现您期望的静态T::create接口。解决这个问题。我很高兴您原来的问题已经解决了。您的意思是将connection=static T::createacceptor@Yumino-你应该打开一个新问题,并在那里发布相关代码,这样你就可以得到一个合理可靠的答案。我要说的是,作为T传递的类没有名为create的静态成员。我不知道它是哪个类,它有什么,所以我不知道你应该如何修复它。这与我在这里回答的问题完全无关。
template <typename T, typename R, typename S, typename A>
class       AbstractNetwork
{
private:
    T       connection;

public:
AbstractNetwork(A acceptor)
{
    this->connection = T::create(acceptor);
}

void write(const R msg)
{
    this->connection->Swrite(msg);
}

read(void)
{
    this->connection->Sread();
    return (this->connection->getIdata());
}

getSocket(void)
{
    return (this->connection->getSocket());
}

close(void)
{
    this->close(); //  <<--- is this a mistake?
    //Probably you wanted this->connection->close();
}

};