未定义的引用,但它已定义

时间:2011-03-19 08:59:04

标签: c++ reference undefined

我有一个带有虚拟内联getter和setter的A类。从A开始有两个B和C类派生。我有一个D级,来自B和C. 从D创建一个对象并使用getName()导致“对getName()的未定义引用”。删除“内联”不起作用。头文件包含正确。 这有什么问题?

class A
{
    public:
        virtual inline std::string getName() const{return name;}

    protected:
        std::string name;
};

class B : public virtual A {};
class C : public virtual A {};

class D : public B, public C {};

1 个答案:

答案 0 :(得分:2)

您的代码可以使用/ inline进行编译:with inlinewithout inline

但请记住这一点:在虚拟继承中,如果基类构造函数将参数视为,则必须显式初始化基数,

class D : public B, public C 
{
   public:
      D(string s) : A(s), B(s), C(s){}
                  //^^^^ note this!

};

D(string s) : B(s), C(s)还不够:http://ideone.com/MPUPj

A(s) 还需要http://ideone.com/DNLkA

有关详细信息,请参阅此主题:about virtual base class and virtual inheritance in C++