: someException(){}
: ~someException(){}
: };
: class AbstractBase
: {
: public:
: virtual ~AbstractBase ()
: throw ();
這裡好像沒有定義 剛沒看仔細 以為你後面有寫它的定義
: virtual void someFunction ()
: throw (someException) = 0;
: };
: #endif //_SPEC_H
: 我手中有Spec.h的檔案裡面 定了 抽象類別 AbstractBase這個class
: 因為是要依照標準所制定的API去實現的,不過它有virtual destructor,
: 所以小弟不知道怎麼怎樣在其它檔案去宣告,才能去實作它。
: 因為我一直發生在連結錯誤的情形。
: 因為我必須還要再另外寫兩個檔案 ImplementSpec.h跟 ImplementSpec.cpp
: 如下所示…
: //file : ImplementSpec.h
: #ifndef _IMP_SPEC_H
: #define _IMP_SPEC_H
: #include "Spec.h"
: class ConcreteDerived : public AbstractBase{
: public:
: ConcreteDerived();
: virtual ~ConcreteDerived()
: throw ();
: virtual void someFunction()
: throw (someException);
: };
: #endif //_IMP_SPEC_H
: //file : ImplementSpec.cpp
: #include "ImplementSpec.h"
: ConcreteDerived::ConcreteDerived()
: {
: //do nothing
: }
: ConcreteDerived::~ConcreteDerived() throw ()
: {
: //do nothing
: }
: void ConcreteDerived::someFunction() throw (someException)
: {
: //do nothing
: }
: 然後我的主程式寫了簡單如下所示的東東。
: //file : test.cpp
: #include "Spec.h"
: #include "ImplementSpec.h"
: class ConcreteDerived;
: int main(){
: AbstractBase *someobj = new ConcreteDerived();
: delete someobj;
: return 0;
: }
: 小弟是在Linux環境下作開發的,然後g++ 版本是
: g++ (GCC) 3.3.5 (Debian 1:3.3.5-13)
: 接著我就對 test.cpp, ImplementSpec.cpp編成 .o檔,最後再連結生成a.out可執行檔
: 下面是我紀錄著我在shell環境下執行的指令,然後下面會發生
: 有關聯結上的錯誤。
: usrooo@xxxcluxxxx:~/VirtualDestructor$ g++ -c test.cpp
: usrooo@xxxcluxxxx:~/VirtualDestructor$ g++ -c ImplementSpec.cpp
: usrooo@xxxcluxxxx:~/VirtualDestructor$ g++ -o a.out test.o
: ImplementSpec.o
: ImplementSpec.o(.text+0x4e): In function `ConcreteDerived::~ConcreteDerived
: [not-in-charge]()':
: : undefined reference to `AbstractBase::~AbstractBase [not-in-charge]()'
: ImplementSpec.o(.text+0x82): In function `ConcreteDerived::~ConcreteDerived
: [in-charge]()':
: : undefined reference to `AbstractBase::~AbstractBase [not-in-charge]()'
: ImplementSpec.o(.text+0xb6): In function `ConcreteDerived::~ConcreteDerived
: [in-charge deleting]()':
: : undefined reference to `AbstractBase::~AbstractBase [not-in-charge]()'
: ImplementSpec.o(.gnu.linkonce.t._ZN12AbstractBaseC2Ev+0x8): In function
: `AbstractBase::AbstractBase[not-in-charge]()':
: : undefined reference to `vtable for AbstractBase'
: ImplementSpec.o(.gnu.linkonce.r._ZTI15ConcreteDerived+0x8): undefined
: reference to `typeinfo for AbstractBase'
: collect2: ld returned 1 exit status
: 因為不知道解決的情況下,只好來這邊請教了。
: 還望各位大大們的幫助了
: 謝謝^__________^y
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.218.185