如何解决这个程序中的错误?

时间:2022-09-27 20:18:01
#include"iostream.h"
//#include<stdafx.h>

class M
{
public:
M(){x=y=0;}
M(int i,int j){x=i;y=j;}
void copy(M* ){};
void setxy(int i,int j){x=i;y=j;}
void print(){cout<<x<<y<<endl; 
private:
int x,y;
};

void M::copy(M* m)
{
x=m->x;
y=m->y;
}

void main()
{
Mp(5,7),q;
q.copy(&p);
fun(p,&q);
p.print();
q.print();
}

void fun(M m1,M*m2)
{
m1.setxy(12,15);
m2->setxy(22,25);
}
=============================================
编译提示:
G:\mfc\sy\cx.cpp(17) : error C2535: 'void __thiscall M::copy(class M *)' : member function already defined or declared
        G:\mfc\sy\cx.cpp(9) : see declaration of 'copy'
G:\mfc\sy\cx.cpp(36) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

sy.exe - 2 error(s), 0 warning(s)
=====================================================
两个错误莫名其妙。请帮小弟解决,先谢~~

unexpected end of file found是什么意思?我已经遇到多次如何解决?

我尝试用#include<stdafx.h>,只一个错误,但又说fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory 这种反常又如何解决呢?
另外,这情况下只报一个错误是因为编译首先检查头文件而忽略余下部分的吗?还是#include<stdafx.h>确实屏蔽了那两错误?

8 个解决方案

#1


在类定义部分: void copy(M* ){};错误
应该是void copy(M* );

#2


还需要把 fun函数的实现,提到main函数的前面

不能在没有声明之前就使用一个函数的

#3


void copy(M* ){};错了。加了{}就已经是函数定义了,不是函数声明。
应该是 void copy(M* );

#4


void copy(M* ){};是函数定义了,不是函数声明

#5


#include<iostream>
using namespace std;

class M
{
public:

M()
{
x=y=0;
}
M(int i,int j)
{
x=i;
y=j;

}
void copy(M* );

void setxy(int i,int j)
{
x=i;
y=j;
}
void print()
{
cout<<x<<"  "<<y<<endl;
}

private:
int x,y;
};

void M::copy(M* m)
{

x=m->x;
y=m->y;
}

void fun(M m1,M*m2)
{

m1.setxy(12,15);
m2->setxy(22,25);
}

int main()
{


M p(5,7),q;
q.copy(&p);
fun(p,&q);
p.print();
q.print();
system("pause");
return 0;

}

#6


class M
{
public:
M(){x=y=0;}
M(int i,int j){x=i;y=j;}
void copy(M* ){};
void setxy(int i,int j){x=i;y=j;}
void print(){cout<<x<<y<<endl; 
private:
int x,y;
};
----------------------
class M
{
public:
M(){x=y=0;}
M(int i,int j){x=i;y=j;}
void copy(M* );
void setxy(int i,int j){x=i;y=j;}
void print(){cout<<x<<y<<endl;}
private:
int x,y;
};

#7


#include"iostream.h"
//#include<stdafx.h>

class M
{
public:
M(){x=y=0;}
M(int i,int j){x=i;y=j;}
void copy(M* );                    //楼上都说了,去掉{}
void setxy(int i,int j){x=i;y=j;}
void print(){cout<<x<<y<<endl; }   //千万别粗心啊。。。({}要成对)
private:
int x,y;
};

void M::copy(M* m)
{
x=m->x;
y=m->y;
}
void fun(M m1,M*m2)  //先声明再用
{                    // 
m1.setxy(12,15);     //
m2->setxy(22,25);    //
}

void main()
{
M p(5,7),q;        //M为类名,要和函数名分开
q.copy(&p);
fun(p,&q);
p.print();
q.print();
}

#8


至于第一个问题, 大家都看到了, 函数重定义
第二个问题, 将那个预编译头放在最前面

#1


在类定义部分: void copy(M* ){};错误
应该是void copy(M* );

#2


还需要把 fun函数的实现,提到main函数的前面

不能在没有声明之前就使用一个函数的

#3


void copy(M* ){};错了。加了{}就已经是函数定义了,不是函数声明。
应该是 void copy(M* );

#4


void copy(M* ){};是函数定义了,不是函数声明

#5


#include<iostream>
using namespace std;

class M
{
public:

M()
{
x=y=0;
}
M(int i,int j)
{
x=i;
y=j;

}
void copy(M* );

void setxy(int i,int j)
{
x=i;
y=j;
}
void print()
{
cout<<x<<"  "<<y<<endl;
}

private:
int x,y;
};

void M::copy(M* m)
{

x=m->x;
y=m->y;
}

void fun(M m1,M*m2)
{

m1.setxy(12,15);
m2->setxy(22,25);
}

int main()
{


M p(5,7),q;
q.copy(&p);
fun(p,&q);
p.print();
q.print();
system("pause");
return 0;

}

#6


class M
{
public:
M(){x=y=0;}
M(int i,int j){x=i;y=j;}
void copy(M* ){};
void setxy(int i,int j){x=i;y=j;}
void print(){cout<<x<<y<<endl; 
private:
int x,y;
};
----------------------
class M
{
public:
M(){x=y=0;}
M(int i,int j){x=i;y=j;}
void copy(M* );
void setxy(int i,int j){x=i;y=j;}
void print(){cout<<x<<y<<endl;}
private:
int x,y;
};

#7


#include"iostream.h"
//#include<stdafx.h>

class M
{
public:
M(){x=y=0;}
M(int i,int j){x=i;y=j;}
void copy(M* );                    //楼上都说了,去掉{}
void setxy(int i,int j){x=i;y=j;}
void print(){cout<<x<<y<<endl; }   //千万别粗心啊。。。({}要成对)
private:
int x,y;
};

void M::copy(M* m)
{
x=m->x;
y=m->y;
}
void fun(M m1,M*m2)  //先声明再用
{                    // 
m1.setxy(12,15);     //
m2->setxy(22,25);    //
}

void main()
{
M p(5,7),q;        //M为类名,要和函数名分开
q.copy(&p);
fun(p,&q);
p.print();
q.print();
}

#8


至于第一个问题, 大家都看到了, 函数重定义
第二个问题, 将那个预编译头放在最前面