问问题
164 次
6 回答
2
地图需要 mapped_type 的类型,而您正在给它re
instance r
。你需要
std::map<unsigned int, re> var;
您的代码可以进一步简化:
struct re {
std::string s;
};
int main()
{
re r;
std::map<unsigned int, re> var;
r.s="hello";
var[10]=r;
}
于 2013-03-17T21:11:45.740 回答
2
r
是类型的一个实例,re
它是struct
您定义的类型别名。因此,你应该改变这个:
std::map<unsigned int, r> var;
进入他的:
std::map<unsigned int, re> var;
// ^^
另请注意,在main()
您重新定义re
结构的过程中,您很可能只想创建它的一个实例:
int main() {
re r;
r.s="hello";
var[10]=r;
}
因此,将所有内容放在一起:
#include <string>
#include <map>
// Avoid this old C style of defining structs. Prefer the
// C++ style I am showing below...
/*
typedef struct {
std::string s;
} re;
*/
struct re
{
std::string s;
};
int main() {
std::map<unsigned int, re> var;
re r;
r.s="hello";
var[10]=r;
}
于 2013-03-17T21:12:01.590 回答
1
首先,你可以说
struct re { std::string s; };
在 C++ 中。这typedef struct {...} name;
是一个C主义。
在您的地图中,您必须提供类型而不是变量
std::map<unsigned int, re> var;
您在main()
函数中遇到的错误是因为您尝试将不同类型的变量分配给main()::struct re
map 元素10
,它是 type typedef struct { ... } re
。
总而言之,struct re
in maintypedef ... re
与全局范围内的类型不同。
于 2013-03-17T21:12:23.707 回答
1
请更换
std::map<unsigned int, r> var;
进入
std::map<unsigned int, re> var;
您定义某种类型的映射,在<>
您将要映射的类型传递给“映射”(定义它们之间的映射)。
这是所有代码片段:
#include <map>
typedef struct {
std::string s;
}re;
re r;
std::map<unsigned int, re> var;
int f(int argc, char** argv) {
re res;
res.s="hello";
var[10]=res;
//and if you want that global variable
r.s="global variable";
var[1]=r;
return ERROR_SUCCESS;
}
于 2013-03-17T21:14:07.973 回答
1
内联注释描述了如何修复您的代码。
#include <string>
#include <map>
//typedef struct { // This is from C. Use the C++ way...
struct re_type {
std::string s;
//} re; // See above
};
// re r; // You do not need a global instance
// std::map<unsigned int, r> var; // `r` was an instance.
// The map declaration needs a type:
std::map<unsigned int, re_type> var; // Note: This is global and should probably be
// moved into main()
int main(){
// struct re{ // No need to redeclare the struct here
// string s;
// }re;
re_type re; // Create a local instance
re.s="hello";
var[10]=re;
}
re
、r
和似乎不是描述性标识符s
。var
使用有意义的标识符将使您的代码更易于阅读和维护,甚至可以帮助您了解出现的编译错误。
于 2013-03-17T21:27:45.683 回答
0
typedef struct {
std::string s;
} re;
然后后来:
std::map<unsigned int, r> var;
不。模板需要类型,但你给它一个变量。将其更改为
std::map<unsigned int, re> var;
它会正常工作。
于 2013-03-17T21:12:45.670 回答