注册 登录
编程论坛 C++教室

运算符重载问题求助

zhang197771 发布于 2012-09-21 20:28, 885 次点击
#include <iostream.h>
class complex
{
public:
    complex(double x,double y);
    complex operator+(complex x);
    complex operator-(complex x);
    void display();
private:
    double real;
    double imange;
};
complex::complex(double x=0,double y=0) {real=x,imange=y;}
complex complex::operator+(complex z)
{
    complex zz;
    zz.real=z.real+real;
    zz.imange=z.imange+imange;
    return complex(zz.real,zz.imange);
};
void complex::display()
{
    cout<<"("<<real<<","<<imange<<")"<<endl;
};
void main()
{
    complex c1(3,5),c2(2,3),c3;
    cout<<"c1=";c1.display();
    cout<<"c2=";c2.display();
    c3=c1+c2;
    cout<<"c3=c1+c2=";c3.display();
}
66.cpp
F:\66\66.cpp(16) : error C2512: 'complex' : no appropriate default constructor available
F:\66\66.cpp(27) : error C2512: 'complex' : no appropriate default constructor available
Error executing cl.exe.

按照教程的演示编写的,可编译出错,不知道什么原因,请高手帮忙分析下。
10 回复
#2
pangding2012-09-21 20:46
只是觉得 iostream.h 和 void main 比较别扭,别的应该没什么大问题呀。楼主是看什么书学的呢?
#3
zhang1977712012-09-21 22:42
回复 2楼 pangding
东南大学何洁月讲师的教学视频学的。看着很想睡觉,但基本快学完了,已经学到多态了。
编译时候提示的这个错误是什么意思
F:\66\66.cpp(16) : error C2512: 'complex' : no appropriate default constructor available


[ 本帖最后由 zhang197771 于 2012-9-21 22:47 编辑 ]
#4
zhang1977712012-09-21 23:30
另外,版主,能给我讲解一个完整的对话框程序吗,就是运行起来,输入输出都是对话框中进行的那种,我在网上搜的都是些编好的代码,没老师讲解,很多函数都不知道是从哪钻出来的。
#5
pangding2012-09-22 08:16
error C2512: 'complex' : no appropriate default constructor available
这个错误提示翻译过来是“没有适合的默认构造函数”
如果以后出现一些语法错误,可以先尝试去百度一下错误号,比如 C2512,一般这都比论坛问来的快。如果百度到的东西帮助不大,再来论坛问更好,毕竟论坛要等几个小时才会人回答,但优点是针对性比较强。

你说的那种对话框程序得专门学。
找点《windows核心编程(Windows Via C/C++)》之类的书会介绍很多。这本书就比较权威,而且讲得很系统,有点难。《windows程序设计》也不错,好像更基础一些,不过我没看过。


[ 本帖最后由 pangding 于 2012-9-22 08:24 编辑 ]
#6
zhang1977712012-09-22 12:02
回复 5楼 pangding
既然程序本身没问题,那为什么会出现“没有适合的默认构造函数”这样的错误提示吗?能分析下吗?

[ 本帖最后由 zhang197771 于 2012-9-22 12:03 编辑 ]
#7
pangding2012-09-22 21:47
不是很清楚。我手头也没有 vc。楼主是用的 vc6.0 吗?
#8
眼底星空2012-09-24 09:02
不管它嘛,按照提示的错误,
complex没有缺省构造函数,就给个缺省complex();

试了vs2008下是能过的,应该和楼主用的编译器有关。
#9
lwbkfc2012-09-25 00:06
vs2010

#include <iostream>
using namespace std;
class complex
{
public:
    complex(double x,double y);
    complex operator+(complex x);
    complex operator-(complex x);
    void display();
private:
    double real;
    double imange;
};
complex::complex(double x=0,double y=0) {real=x,imange=y;}
complex complex::operator+(complex z)
{
    complex zz;
    zz.real=z.real+real;
    zz.imange=z.imange+imange;
    return zz;
};
void complex::display()
{
    cout<<"("<<real<<","<<imange<<")"<<endl;
};
void main()
{
    complex c1(3,5),c2(2,3),c3;
    cout<<"c1=";c1.display();
    cout<<"c2=";c2.display();
    c3=c1+c2;
    cout<<"c3=c1+c2=";
    c3.display();
}
#10
小糊涂神c302012-09-25 19:01
运行没什么问题!不过最好还是用#include<iostream>  using namespace std;比较好,.h一般都是c语言的头文件,在c++中应少用!
#11
lz10919149992012-09-25 21:23
回复 5楼 pangding
那本核心编程主要是讲内核对象,线程,IO,DLL,异常处理等东西,没有涉及到UI方面的东西,不过Windows程序设计这本还是值得一看的。
1