map中结构体的赋值

树无影 2012-02-20 07:28:48


/************************************************************************/
/* pair对象的创建和使用 */
/************************************************************************/
#include <iostream>
#include <utility>
#include <map>
#include <string.h>
using namespace std;

class Student
{
public:
Student()
{
strcpy(m_sName, "NULL");
m_nAge = 0;
}

Student(char sName[20], int nAge)
{
strcpy(m_sName ,sName);
m_nAge = nAge;
}
Student(Student& s1)
{
strcpy(m_sName, s1.GetName());
m_nAge = s1.GetAge();
}

int GetAge()
{
return m_nAge;
}

char * GetName()
{
return m_sName;
}
private:
char m_sName[20];
unsigned int m_nAge;
};

int main()
{
Student s1("sdd",3);

map<int, Student> m1;
m1.insert(pair<int, Student>(12, s1) );



return 0;
}



怎么传结构体啊? 怎么改啊?
...全文
514 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
树无影 2012-02-21
  • 打赏
  • 举报
回复
谢谢各位大侠啦
pengzhixi 2012-02-21
  • 打赏
  • 举报
回复
返回值类型改成 const char*就是了
树无影 2012-02-21
  • 打赏
  • 举报
回复

char * GetName() const
{
return m_sName;
}


这句报错
error C2440: 'return' : cannot convert from 'const char [20]' to 'char *'
怎么改啊?
pengzhixi 2012-02-21
  • 打赏
  • 举报
回复

class Student
{
public:
Student()
{
strcpy(m_sName, "NULL");
m_nAge = 0;
}

Student(int a)
{
m_nAge = a;
}

Student(const char*sName, int nAge)
{
strcpy(m_sName ,sName);
m_nAge = nAge;
}
Student(const Student& s1)
{
strcpy(m_sName, s1.m_sName);
m_nAge = s1.m_nAge;
}

int GetAge()
{
return m_nAge;
}

char * GetName()
{
return m_sName;
}
private:
char m_sName[20];
unsigned int m_nAge;
};

int main()
{
// Student s1;

map<int, Student> m1;
m1.insert(pair<int,Student>(12, Student("lilin", 3)) );

system("pause");
return 0;
}

downmooner 2012-02-21
  • 打赏
  • 举报
回复
int GetAge() const
{
return m_nAge;
}

char * GetName() const
{
return m_sName;
}
树无影 2012-02-21
  • 打赏
  • 举报
回复

/************************************************************************/
/* pair对象的创建和使用 */
/************************************************************************/
#include <iostream>
#include <utility>
#include <map>
#include <string.h>
using namespace std;

class Student
{
public:
Student()
{
strcpy(m_sName, "NULL");
m_nAge = 0;
}

Student(int a)
{
m_nAge = a;
}

Student(char sName[20], int nAge)
{
strcpy(m_sName ,sName);
m_nAge = nAge;
}
Student(const Student& s1)
{
strcpy(m_sName, s1.GetName());
m_nAge = s1.GetAge();
}

int GetAge()
{
return m_nAge;
}

char * GetName()
{
return m_sName;
}
private:
char m_sName[20];
unsigned int m_nAge;
};

int main()
{
Student s1;

map<int, Student> m1;
m1.insert(pair<int, Student>(12, s1("lilin", 3)) );



return 0;
}



这样怎么还是报错啊?
C:\Users\Administrator\Desktop\程序源\1.cpp(31) : error C2662: 'GetName' : cannot convert 'this' pointer from 'const class Student' to 'class Student &'
Conversion loses qualifiers
C:\Users\Administrator\Desktop\程序源\1.cpp(32) : error C2662: 'GetAge' : cannot convert 'this' pointer from 'const class Student' to 'class Student &'
Conversion loses qualifiers
C:\Users\Administrator\Desktop\程序源\1.cpp(54) : error C2064: term does not evaluate to a function
Error executing cl.exe.

1.obj - 3 error(s), 0 warning(s)
caddor 2012-02-20
  • 打赏
  • 举报
回复
2010 通过



insert成员函数不就可以了吗

merlinfang 2012-02-20
  • 打赏
  • 举报
回复
缺了拷贝构造,你那个没const的不行
Student(const Student& s1)
无芒 2012-02-20
  • 打赏
  • 举报
回复
错误描述 error: Student 没有可用的复制构造函数或复制构造函数声明为“explicit”

容器元素类型有两个最基本的约束:
元素类型必须支持赋值运算
元素类型的对象必须可以复制

给 Student定义复制构造函数吧 因为容器内部的元素是通过复制初始化的~~
ryfdizuo 2012-02-20
  • 打赏
  • 举报
回复
map<int, Student> m1;
m1.insert(pair<int, Student>(12, Student("sdd",3)) );
m1[13] = Student("scc", 4);

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧