Templates C++;11共享ptr模板的向量
我正在尝试调用以下函数模板:Templates C++;11共享ptr模板的向量,templates,c++11,vector,xcode5,shared-ptr,Templates,C++11,Vector,Xcode5,Shared Ptr,我正在尝试调用以下函数模板: template<typename T> bool select(const std::string& ddbbName, const std::string& sql, std::vector<std::shared_ptr<T>>& vResultSet, SqlErrorInfo&
template<typename T>
bool select(const std::string& ddbbName,
const std::string& sql,
std::vector<std::shared_ptr<T>>& vResultSet,
SqlErrorInfo& errorInfo);
SQLiteMgr.h文件:
#ifndef __TestSharedPtr__SQLiteMgr__
#define __TestSharedPtr__SQLiteMgr__
#include <iostream>
#include <vector>
#include <memory>
namespace Cucut
{
struct SqlErrorInfo
{
int rc;
std::string description;
};
class SQLite3Manager
{
private:
SQLite3Manager();
SQLite3Manager(const SQLite3Manager& rs);
SQLite3Manager(SQLite3Manager&& rs);
SQLite3Manager& operator = (const SQLite3Manager& rs);
SQLite3Manager& operator = (SQLite3Manager&& rs);
public:
static SQLite3Manager& getInstance();
template<typename T>
bool select(const std::string& ddbbName,
const std::string& sql,
std::vector<std::shared_ptr<T>>& vResultSet,
SqlErrorInfo& errorInfo);
};
}
#endif /* defined(__TestSharedPtr__SQLiteMgr__) */
\ifndef\uuuu TestSharedPtr\uuu SQLiteMgr__
#定义uuu TestSharedPtr_uuusqlitemgr__
#包括
#包括
#包括
名称空间Cucut
{
结构SqlErrorInfo
{
int rc;
std::字符串描述;
};
类SQLite3Manager
{
私人:
SQLite3Manager();
SQLite3Manager(const SQLite3Manager&rs);
SQLite3Manager(SQLite3Manager&rs);
SQLite3Manager&operator=(常量SQLite3Manager&rs);
SQLite3Manager&operator=(SQLite3Manager&rs);
公众:
静态SQLite3Manager&getInstance();
模板
bool select(const std::string和ddbbName,
常量std::字符串和sql,
std::vector&vResultSet,
SqlErrorInfo&errorInfo);
};
}
#endif/*已定义(\uuuu TestSharedPtr\uuuu SQLiteMgr\uuuuuu)*/
最后是SQLiteMgr.cpp文件:
#include "ES.h"
namespace Cucut
{
ES::ES() :
_id(0)
{
}
const unsigned int& ES::getId() const
{
return _id;
}
void ES::setId(const unsigned int& id)
{
_id = id;
}
}
#include <memory>
#include <vector>
#include "SQLiteMgr.h"
namespace Cucut
{
SQLite3Manager::SQLite3Manager()
{
}
SQLite3Manager& SQLite3Manager::getInstance()
{
static SQLite3Manager instance;
return instance;
}
template<typename T>
bool SQLite3Manager::select(const std::string& ddbbName,
const std::string& sql,
std::vector<std::shared_ptr<T>>& vResultSet,
SqlErrorInfo& errorInfo)
{
return true;
}
}
#包括
#包括
#包括“SQLiteMgr.h”
名称空间Cucut
{
SQLite3Manager::SQLite3Manager()
{
}
SQLite3Manager&SQLite3Manager::getInstance()
{
静态SQLite3Manager实例;
返回实例;
}
模板
bool SQLite3Manager::select(const std::string和ddbbName,
常量std::字符串和sql,
std::vector&vResultSet,
SqlErrorInfo和errorInfo)
{
返回true;
}
}
不要因为名称“SqliteMgr”而分心,因为在前面的示例中,为了简化问题,我删除了对sqlite3的任何类型的引用;因此,我似乎没有以正确的方式调用或定义方法“select”,因为我得到了前面提到的链接错误
任何帮助都将不胜感激。提前感谢。函数模板定义必须始终位于头文件中,以便可以在实例化时生成代码(这里是main)。如果您不这样做,编译器将期望您手动实例化模板,这就是为什么会出现链接器错误的原因。将select函数的主体移动到SQLiteMgr.h,它就会工作。你需要修复你的标题,包括停止使用的防护,你完全正确!第一次编写这个类时,我没有使用任何模板,但在修改它之后,我忘记了将模板方法的主体移动到标题。谢谢!
#include "ES.h"
namespace Cucut
{
ES::ES() :
_id(0)
{
}
const unsigned int& ES::getId() const
{
return _id;
}
void ES::setId(const unsigned int& id)
{
_id = id;
}
}
#ifndef __TestSharedPtr__SQLiteMgr__
#define __TestSharedPtr__SQLiteMgr__
#include <iostream>
#include <vector>
#include <memory>
namespace Cucut
{
struct SqlErrorInfo
{
int rc;
std::string description;
};
class SQLite3Manager
{
private:
SQLite3Manager();
SQLite3Manager(const SQLite3Manager& rs);
SQLite3Manager(SQLite3Manager&& rs);
SQLite3Manager& operator = (const SQLite3Manager& rs);
SQLite3Manager& operator = (SQLite3Manager&& rs);
public:
static SQLite3Manager& getInstance();
template<typename T>
bool select(const std::string& ddbbName,
const std::string& sql,
std::vector<std::shared_ptr<T>>& vResultSet,
SqlErrorInfo& errorInfo);
};
}
#endif /* defined(__TestSharedPtr__SQLiteMgr__) */
#include <memory>
#include <vector>
#include "SQLiteMgr.h"
namespace Cucut
{
SQLite3Manager::SQLite3Manager()
{
}
SQLite3Manager& SQLite3Manager::getInstance()
{
static SQLite3Manager instance;
return instance;
}
template<typename T>
bool SQLite3Manager::select(const std::string& ddbbName,
const std::string& sql,
std::vector<std::shared_ptr<T>>& vResultSet,
SqlErrorInfo& errorInfo)
{
return true;
}
}