本人是个C++的小白 有道程序改错题请大佬解惑

#include<iostream>
class D1
{
int a;
protected:
int b;
public:
D1(int x=5,int y){a=x;b=y;}
void display()
{cout<<a<<endl<<b<<endl;}
};
class D2
{
int c;
public:
D2(int z=0){c=z;}
void display()
{cout<<c;}
};
class B:public D1,public D2
{
int d;
public:
B(int x){d=x;}
void show()
{D1::display();
cout<<c;
cout<<d<<endl;}
};
void main()
{B t2(30);
t2.show();
t2.display();
}

#include<iostream>
using namespace std;//常见的少了一句 
class D1
{
	int a;
	protected:
	int b;
	public:
	D1(int x=5,int y=0){a=x;b=y;}//前面的含默认的参数,后面的必有默认参数(就是一般把有默认参数的放后边) 
	void display()
	{cout<<a<<endl<<b<<endl;}
	};
class D2
{
	protected://下面子类 B有用到 c,所以c不能是private 
	int c;
	public:
	D2(int z=0){c=z;}
	void display()
	{cout<<c;}
};
class B:public D1,public D2
{
int d;
public:
B(int x){d=x;}
void show()
{D1::display();
cout<<c;
cout<<d<<endl;}
};
int main()//main函数要int,下面return 0 
{B t2(30);
t2.show();
t2.D2::display();//D1和D2类都含有函数display,调用时会混淆 
return 0;
}

 

cin/cout/endl等要用命名空间std,应该在第二行的位置写上using namespace std,或者用scanf和printf,再或者在cin,cout和endl前面都加上std::。