没有默认的构造函数

Seffrui_M 2013-02-22 09:35:07
#include<iostream>
using namespace std;
class A
{
int x;
public:
friend class B;
A(int b)
{
x=b;
}
void Print()
{
cout<<x<<endl;
}
};
class B
{
A a;
int y;
public:
void set()
{
y=a.x;
}
void Print1()
{
cout<<"i am called "<<endl;
cout<<y<<endl;
a.Print();
}
};
int main()
{
A b=3;
b.Print();
B x;
x.set();
x.Print1();
return 0;
}

1>d:\vs2012\project\i am learning\i am learning\j.cpp(37): error C2512: “B”: 没有合适的默认构造函数可用
说我没有默认的构造函数 为什么 我之时想声明一下x啊
...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
大狗的偏执 2013-02-22
  • 打赏
  • 举报
回复
B中有个成员A a; 你想构造个B x; 但B在构造自己时先构造成员A却不知道如何构造,因为A没有缺省的无参构造函数 要不你在B构造函数中给A成员传参,要不你给A添加一个默认无参构造
帅得不敢出门 2013-02-22
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
class A
{
    int x;
public:
    friend class B;
    A(int b)
    {
        x=b;
    }
    A()      // 提供一个A的默认构造就行
    {
        x = 0;
    }
    void Print()
    {
        cout<<x<<endl;
    }
};
class B
{
    A a;
    int y;
public:
    void set()
    {
        y=a.x;
    }
    void Print1()
    {
        cout<<"i am called "<<endl;
        cout<<y<<endl;
        a.Print();
    }
};
int main()
{
    A b=3;
    b.Print();
    B x;
    x.set();
    x.Print1();
    return 0;
}

  • 打赏
  • 举报
回复
要构造a必须在B的构造函数中提供a的参数。否则就会遇到这个错误。
Seffrui_M 2013-02-22
  • 打赏
  • 举报
回复
引用 1 楼 hello_world000 的回复:
class B { public: B(int val) : a(val){} };
我只是想声明一下 X 啊 为什么不可以呢
hello_world000 2013-02-22
  • 打赏
  • 举报
回复
class B { public: B(int val) : a(val){} };

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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