所有Base类方法的未定义引用错误

时间:2013-04-26 09:12:14

标签: c++

我有以下基类和派生类结构。

碱/包含/ Base.h

namespace A
{
namespace B
{

class Base
{
public:
    Base();
    Base(const Type type, const Name name);
    virtual ~Base();

    // Copy constructor
    Base(const Base& other);

    // Assignment operator
    Base& operator= (const Base& rhs);

    // Comparison
    bool operator< (const Base& rhs);

    std::string toString();

    //These enums have been defined in same file above the class

    enum Type mType;
    enum Name mName;
};

}
}

base / src / Base.cpp

#include "Base.h"
//and other required includes

namespace A
{
namespace B
 {

Base::Base()
{

}

Base::Base(const Type type, const Name name)
{

}

Base::~Base()
{

}

// Copy constructor
Base::Base(const Base& other)
{

}

// Assignment operator
Base& Base::operator= (const Base& rhs)
{

}

// Comparison
bool Base::operator< (const Base& rhs)
{

}

std::string Base::toString()
{

}
 }
}

碱/测试/ test.h

 #include "Base.h"
  namespace A
  {
   namespace B
    {
   class Derived: public Base
   {

       public:
    Derived();
    Derived(const Type type, const Name name);
    virtual ~Derived();

    Derived(const Derived& other);
    Derived& operator= (const Derived& rhs);

    virtual std::string toString();
};

  }
  }

碱/测试/ TEST.CPP

   #include "test.h"
   namespace A
   {
    namespace B
     {


    Derived::Derived()
    {

    }

    Derived::Derived(const Type type, const Name name)
    :Base(type, name)
    {

    }

    Derived::~Derived()
    {

    }

    Derived::Derived(const Derived& other)
    {

    }

    Derived& Derived::operator= (const Derived& rhs)
    {

    }

    std::string Derived::toString()
    {

    }
};

    }
 }

现在,我正在为Base类目录构建libBase.a。 然后我尝试在base / test目录中的命令行上编译Derived类:

 g++ *.cpp -o Test  \
  -I /cygdrive/c/projects/base/include \
  -L /cygdrive/c/projects/base/Build -lBase

但我得到的错误如下:

/tmp/ccjLwXZp.o:Derived.cpp:(.text+0x10d): undefined reference to `A::B::Base::Base()
/tmp/ccjLwXZp.o:Derived.cpp:(.text+0x129): undefined reference to `A::B::Base::Base()
/tmp/ccjLwXZp.o:Derived.cpp:(.text+0x161): undefined reference to `A::B::base::Base(const Type type, const Name name)'

我在基类中定义的所有函数都会遇到这些错误。   我不确定,我做错了什么。   我已经检查过libBase.a在适当的位置

1 个答案:

答案 0 :(得分:0)

问题可能与您在c-tor声明后声明TypeName枚举的事实有关。因此,编译器无法构建Base类。

class Base
{
public:
    enum Type mType;   // <-- define the type and Name here, before
    enum Name mName;   // <-- the C-tor (actual usage)


    Base();
    Base(const Type type, const Name name);
    virtual ~Base();

    // Copy constructor
    Base(const Base& other);

    // Assignment operator
    Base& operator= (const Base& rhs);

    // Comparison
    bool operator< (const Base& rhs);

    std::string toString();

    //These enums have been defined in same file above the class

    //enum Type mType;   // <<- your original location
    //enum Name mName;
};