2009-10-15 87 views
-2
class base 
{ 
    base() { } 
    virtual ~base() { } 
} 

class middleBase 
{ 
    middleBase() { } 
    middleBase (int param) { } 
    ~middleBase() { } 
} 

class concrete : public middleBase 
{ 
    concrete() { } 
    concrete (int param) { // process } 
    ~concrete() { // delete something } 
} 

错误是:undefinded提及 “middleBase :: middleBase(INT PARAM)”C++抽象类结构和破坏

和是这适合于参数化的构造最佳做法?

+1

这不应该编译。 – 2009-10-15 08:54:45

+2

请发表问题可以重现的真实代码。这个代码有多个问题就像失踪;对于类,middleBase不是从base派生的,middleBase析构函数不是虚拟的,缺少访问说明符等。 – Naveen 2009-10-15 08:56:20

回答

8
class base 
{ 
    public: // constructor should be accessible by derived class 
    base() { } 
    virtual ~base() { } 
}; // add semicolon 

class middleBase : public base // you missed the declaration 
{ 
    public: 
    middleBase() { } 
    middleBase (int param) { } 
    virtual ~middleBase() { } 
}; 

class concrete : public middleBase 
{ 
    public: 
    concrete() { } 
    concrete (int param) : middleBase(param) { /* process */ } 
    virtual ~concrete() { /* delete something */ } 
}; 
3

C类定义之后++需要分号:

class { … }; 
0

如果没有前级的成员函数和变量放在访问限定符(公共/私营/保护),默认是private说明符C++类。所以middleBase的构造函数是私有的,不能通过concrete类的构造函数访问,导致你提到的错误。