在这个程序中,我们使用从a类到c类的数据转换。当我们使用
时a(c c1)
{
return (c1.getd()*100)
}
// constructor in class a, this is correct, but when when we use
c(a a1)
{
return (a1.getb()/100)
}
// constructor, then compile error comming that getb is not a member of a please clear what is the problem.
#include<iostream.h>
#include<conio.h>
class a;
class c {
int d;
public:
c() {
d=0;
}
c(int x) {
d=x;
}
int getd() {
return d;
}
void putdata() {
cout<<d;
}
c(a a1){
d=(a1.getb()/100);//here is compile error coming --getb is not a member of a
}
};
class a {
int b;
public:
a() {
b=0;
}
a(int x) {
b=x;
}
void putdata() {
cout<<b;
}
int getb() {
return b;
}
};
void main() {
c c1;
a a1=100;
a a2(100);
c1=a1;
c1.putdata();
getch();
}
答案 0 :(得分:1)
a
是(转发)声明,但在遇到该函数定义时未定义。将定义移至class a
的定义:
class a;
class c {
int d;
public:
c() { d=0; }
c(int x) { d=x; }
int getd() { return d; }
void putdata() { cout<<d; }
c(a& a1); // Pass a1 as reference as class a is not yet defined.
};
class a
{
...
};
c::c(a& a1)
{
d=(a1.getb()/100);
}
另外,#include <iostream>
代替#include <iostream.h>
。
答案 1 :(得分:1)
当你写
class a;
您承诺在稍后阶段定义“a类”。
然后在定义之前使用了类a。 可以通过编写在类a之后使用类a的代码来使代码工作。
#include<iostream>
#include<conio.h>
using namespace std;
class a;
class c
{
int d;
public:
c():d(0) {}
c(int x):d(x) {}
int getd() {return d;}
void putdata() {cout<<d;}
c(a a1); // defined after class a is defined
};
class a
{ int b;
public:
a():b(0) {}
a(int x): b(x) {}
void putdata() {cout<<b;}
int getb() {return b;}
};
c::c(a a1)
{
// uses class a after it is defined
d=(a1.getb()/100);
}
void main()
{
c c1;
a a1=100;
a a2(100);
c1=a1;
c1.putdata();
getch();
}
答案 2 :(得分:0)
编译器总是从顶部解析您的文本文件,因此在使用方法或函数之前,您必须对其进行定义。
你的行class a;
告诉编译器有一个名为a的类,但此时编译器不知道任何成员函数。
如果在类c的声明之前放入以下代码,那么编译器知道在类a的对象上使用mehod getb
并不违法,即使它不知道该方法的作用
class a
{
public:
int getb();
}
答案 3 :(得分:0)
我认为问题是声明类的顺序。请尝试以下方法:
#include<iostream.h>
#include<conio.h>
class a
{
int b;
public:
a()
{
b=0;
}
a(int x)
{
b=x;
}
void putdata()
{
cout<<b;
}
int getb()
{
return b;
}
};
class c
{
int d;
public:
c()
{
d=0;
}
c(int x)
{
d=x;
}
int getd()
{
return d;
}
void putdata()
{
cout<<d;
}
c(a a1)
{
d=(a1.getb()/100);//here is compile error coming --getb is not a member of a
}
};
int main()
{
c c1;
a a1=100;
a a2(100);
c1=a1;
c1.putdata();
getch();
return 0;
}