无序_映射-未定义模板的隐式实例化 我的C++生疏了。我有一个成员变量,它是一个无序映射
我试图在类构造函数中填充映射。我做错了什么 从我的标题:无序_映射-未定义模板的隐式实例化 我的C++生疏了。我有一个成员变量,它是一个无序映射,c++,unordered-map,C++,Unordered Map,我试图在类构造函数中填充映射。我做错了什么 从我的标题: #include <iostream> #include <unordered_map> using namespace std; typedef enum{ GET, POST, PUT, DELETE }http_verb; class CouchServer{ string host; int port; string dbname; un
#include <iostream>
#include <unordered_map>
using namespace std;
typedef enum{
GET,
POST,
PUT,
DELETE
}http_verb;
class CouchServer{
string host;
int port;
string dbname;
unordered_map<http_verb,string> req_types;
public:
更新:
阅读了提供的答案和评论后,我将标题更改为:
class CouchServer{
string host;
int port;
string dbname;
unordered_map<http_verb,string> req_types;
public:
CouchServer(std::string host, int port, std::string dbname)
: host(std::move(host))
, port(port)
, dbname(std::move(dbname))
, req_types{
{ http_verb::GET, "GET" },
{ http_verb::POST, "POST" },
{ http_verb::PUT, "PUT" },
{ http_verb::DELETE, "DELETE" }
}
{ }
class CouchServer{
字符串主机;
国际港口;
字符串dbname;
无序映射请求类型;
公众:
CouchServer(std::string主机,int端口,std::string数据库名)
:主机(标准::移动(主机))
,港(港)
,dbname(std::move(dbname))
,请求类型{
{http_动词::GET,“GET”},
{http_动词::POST,“POST”},
{http_动词::PUT,“PUT”},
{http_动词::DELETE,“DELETE”}
}
{ }
同样的问题依然存在。我应该提到,我正在尝试使用XCode 4编译这段代码,也就是说Apple LLVM编译器4.2。这可能是编译器的限制。在GCC 4.7.2中,类似的东西也适用于我,而且标准确实说有一个赋值运算符接受初始值设定项列表 但是您不应该在构造函数中执行任何赋值!最好使用构造函数初始值设定项列表:
CouchServer(std::string host, int port, std::string dbname)
: host(std::move(host))
, port(port)
, dbname(std::move(dbname))
, req_types { { http_verb::GET, "GET" } } // etc.
{ }
(当然,永远不要在头文件中说滥用名称空间std;
)
您必须为您的枚举专门化
std::hash
;将其转换为合适的整数类型应该可以做到这一点。如何访问req_类型[GET]
在初始值设定项列表中?我认为在构建时,req\u types
是空的。你的意思是http\u verb::GET
?无论如何,这无助于解决std::hash不是专门用于http\u verb
(我也在使用gcc 4.7.2)编写成员初始化程序的方式看起来就像Haskell中的东西。在C++中也很常见吗?@ IXANZEIS:是的,我已经做了。你必须专门研究代码> STD::散列,当然。“滥用名称空间STD”;为什么不呢?我很感兴趣:)@didierc:我喜欢这种风格,因为它缩进很好,而且很容易按行编辑……你需要创建一个简单的、自包含的编译示例。这意味着你需要一行一行地删除代码(或者成对地删除std::string主机;
行和host(std::move(host))
initializer,每次检查是否仍然出现相同的编译器错误。当您没有更多的代码要删除,并且错误仍然发生时,您将看到一个简短的、自包含的编译示例来演示您的问题。这是必需的,因为我们不会阅读超过1000行的代码,您不知道该执行什么操作当你把它缩短的时候,nes实际上很重要。你能给出错误信息吗?我这里没有mac电脑来测试。
CouchServer(std::string host, int port, std::string dbname)
: host(std::move(host))
, port(port)
, dbname(std::move(dbname))
, req_types { { http_verb::GET, "GET" } } // etc.
{ }