输出

2017-07-03 50 views
-2
当我运行该代码
#include<iostream> 
using namespace std; 

class A { 
     int i; 
public: 
    // A() {cout<<"in A's def const\n";}; 
    A(int k) {cout<<"In A const\n"; i = k; } 
    }; 

class B : public A { 
public: 
    //B(){cout<<"in B's def const\n";}; 
    B(int i) : A(i) {cout<<"in B const\n";} 
    }; 

    class C : public B { 
    public: 
    C() {cout<<"in C def cstr\n";} 
    C(int i) : B(i) {cout<<"in C const\n";} 
    }; 

int main() 
{ 
    C obj=new C(2); 
    return 0; 
    } 

它显示 在构造“C :: C()”: 88c8237e3ffce7819f082b210069fd59.cpp:19:13:错误:对呼叫没有匹配的功能为' B :: B()”输出

为什么出现这种情况,因为我只caling参数的构造函数明确everywhere.??please帮助 C(){COUT < < “用C高清CSTR \ n”;}

+0

_“我只是调整参数化构造函数明确无处不在”_ - 再次看,你不是。 –

+0

如果您没有明确指定任何基类构造函数,则调用默认的构造函数。由于你的类B没有基类构造函数,所以你有一个错误。 –

回答

6

您不能申报

C() {cout<<"in C def cstr\n";} 

因为基类AB都没有默认(非参数化)构造函数。如果你取消注释your code would compile(除了下面的评论)。

边评论,这是不正确的

C obj=new C(2); 

您可以使用下列任一

C obj(2); 
C obj{2}; 
C obj = C(2); 

但随着new你必须分配给一个指针(我不会建议除非你需要堆分配对象出于某种原因,在这种情况下更喜欢智能指针)。

C* obj = new C(2); 
delete obj; // remember to delete it when you're done