-1
4

6 回答 6

2

地图需要 mapped_type 的类型,而您正在给它reinstance 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 remap 元素10,它是 type typedef struct { ... } re

总而言之,struct rein 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;
}

rer和似乎不是描述性标识符svar使用有意义的标识符将使您的代码更易于阅读和维护,甚至可以帮助您了解出现的编译错误。

于 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 回答