opertor = 问题

huhacn 2010-07-05 03:34:08
class Employee
{
friend istream& operator>>(istream& in, Employee& s);
friend ostream&
operator<<(ostream& out, const Employee& s);

public:
Employee():m_nId(1){}
Employee(string s):m_eeName(s)
{
m_nId = 1;
}

Employee& operator=(Employee &e)
{
m_eeName = e.m_eeName;
m_nId = ++e.m_nId;
cout<<"==="<<endl;
getchar();
return *this;
}

Employee(string &s, int id):m_eeName(s),m_nId(id)
{
}

Employee(Employee& e)
{
m_eeName = e.m_eeName;
m_nId = ++e.m_nId;
}
private:
string m_eeName;
int m_nId;
};



//main
string s = "huha";
Employee eme1(s, 0);
Employee eme8(s, 12);
eme8 = eme1;


1>c:\documents and settings\adminimaster\my documents\visual studio 2005\projects\demo\cprimer\cprimer.cpp(76) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\documents and settings\adminimaster\my documents\visual studio 2005\projects\demo\cprimer\cprimer.cpp(76) : error C2371: “eme8”: 重定义;不同的基类型
1> c:\documents and settings\adminimaster\my documents\visual studio 2005\projects\demo\cprimer\cprimer.cpp(75) : 参见“eme8”的声明
1>c:\documents and settings\adminimaster\my documents\visual studio 2005\projects\demo\cprimer\cprimer.cpp(76) : error C2440: “初始化”: 无法从“Employee”转换为“int”
1> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
我的属于什么情况?
...全文
130 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhacn 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 taodm 的回复:]
楼主属于超能够举一反三的了,你在哪见过eme8 = eme1;写在函数外面的呢。
作为最基本的语法规定,又有啥可讨论的呢。
[/Quote]
谢了....
小楫轻舟 2010-07-05
  • 打赏
  • 举报
回复
赋值不能放在main函数外面吧
taodm 2010-07-05
  • 打赏
  • 举报
回复
楼主属于超能够举一反三的了,你在哪见过eme8 = eme1;写在函数外面的呢。
作为最基本的语法规定,又有啥可讨论的呢。
huhacn 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wade_2003 的回复:]
第一个问题估计是你输入格式为中文格式,你可以看看
或者

C/C++ code

int main()
{
string s = "huha";
Employee eme1(s, 0);
Employee eme8(s, 12);
eme8 = eme1;
return 0;
}
[/Quote]
声明为全局变量不行,局部(放入main就ok)
不知何故啊
wade_2003 2010-07-05
  • 打赏
  • 举报
回复
第一个问题估计是你输入格式为中文格式,你可以看看
或者

int main()
{
string s = "huha";
Employee eme1(s, 0);
Employee eme8(s, 12);
eme8 = eme1;
return 0;
}

huhacn 2010-07-05
  • 打赏
  • 举报
回复
//emp.h

#ifndef C_CLASS
#define C_CLASS
#include "iostream"
using namespace std;


class Employee
{
public:
Employee& operator=(Employee &e)
{
m_eeName = e.m_eeName;
m_nId = ++e.m_nId;
cout<<"==="<<endl;
getchar();
return *this;
}

Employee(string &s, int id):m_eeName(s),m_nId(id)
{
}

Employee(Employee& e)
{
m_eeName = e.m_eeName;
m_nId = ++e.m_nId;
}
protected:
private:
string m_eeName;
int m_nId;
};

#endif

//cprimer.cpp

#include "stdafx.h"
#include "iostream"
#include "string"
#include "emp.h"

string s = "huha";
Employee eme1(s, 0);
Employee eme8(s, 12);
eme8 = eme1;

int _tmain(int argc, _TCHAR* argv[])
{

}
定义为全局变量,则会有上面的错误,若把string s = "huha";
Employee eme1(s, 0);
Employee eme8(s, 12);
eme8 = eme1;
放到main函数里面则正常,为什么这样,全局与局部在这里面的差别到底是什么?谢谢
小楫轻舟 2010-07-05
  • 打赏
  • 举报
回复
我用你给的残存代码,
在VS2008里
加上个
#include <iostream>
using namespace std;

编译和运行没问题啊!(运行结果是否正确就没看了)

taodm 2010-07-05
  • 打赏
  • 举报
回复
你这属于代码不完整。别人都无法直接复现你的错误。

64,648

社区成员

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

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