为什么在底层示例中让编译器抱怨B构造函数的重新定义。如果我删除{}它抱怨他们需要在那里。这是如何正确完成的? 我想在CPP文件中实现B的构造函数而不是内联。
#include <vector>
#include <sstream>
#include <iostream>
using namespace std;
class A
{
public:
A();
~A();
};
class B : public A
{
public:
B() : A() {};
~B();
};
A::A()
{
cout << "A construct!";
}
B::B()
{
cout << "B construct!";
cout << "B construct!";
cout << "B construct!";
cout << "B construct!";
cout << "B construct!";
cout << "B construct!";
cout << "B construct!";
cout << "B construct!";
cout << "B construct!";
cout << "B construct!";
}
int main()
{
return 0;
}
答案 0 :(得分:4)
您已在类定义中定义了B构造函数:
class B : public A
{
public:
B() : A() {};
~B();
};
因此,当您在类定义之外再次定义它时:
B::B()
{
cout << "B construct!";
你得到错误;如果正确的构造函数是最后一个构造函数,请将此类定义替换为以下构造函数:
class B : public A
{
public:
B();
~B();
};
如果要在B构造函数定义中指定基类构造函数,可以执行以下操作:
B::B()
: A()
{
cout << "B construct!";
答案 1 :(得分:1)
删除: A() {}
,这是构造函数的主体,而不仅仅是{}
。将初始化程序列表添加到您稍后使用的正文B::B()
。