2012-06-02 43 views
0

沒能進入總而言之:派生類成員函數在C++

class A { 
     public: 
       A(); 
       ~A(); 
       void SetID(char* ID); 
       char* GetID(); 
     protected: 
       char ID[10]; 
}; 

class B: public A { 
     public: 
       B(); 
       ~B(); 
     protected: 
       ... 
     private: 
       ... 
}; 

然後,在主:

... 
B *temp = new B; 
temp->SetID("0x12345678"); 
... 

然後編譯器,所述「預期構造,析構函數或類型轉換前 - >令牌「其中」temp-> SetID(「0x12345678」)「謊言

任何人給我一些提示?

整體規劃設計爲洛基建議:

#include <iostream> 

    using namespace std; 

    class A { 
     public: 
     A(); 
     ~A(); 
     void SetID(char* id); 
     char* GetID(); 
     protected: 
      char ID[10]; 
    }; 

    void A::SetID(char* id){ 
     strcpy(ID,id);   
    } 
    char* A::GetID(){ 
     return ID; 
    } 
    class B: public A { 
      public: 
       B(); 
       ~B(); 
      protected: 
       int num; 
    }; 


    int main(){ 
    B *temp = new B; 
    B->SetID("0x12345678"); 
    cout<<B->GetID()<<endl; 

    return 0; 
    } 
+0

試試'new B()'。在'B'中你也拼寫'protected'。 – chris

+0

@chris:由於'B'具有用戶聲明的默認構造函數'new B'和'new B()'完全一樣。 –

+0

你試過了:void SetID(** const ** char * ID)? – akhisp

回答

0

讓我猜。

在使用此代碼之前,您已使用不成對的大括號關閉main,然後才能看到此代碼,並且您認爲該代碼位於main。所以它是任何函數的外部,並且除了初始化器之外,這不是表達式的地方。

1

您正在使用B,這是一種類型,您可能打算使用temp這是變量的名稱。

相反的:

int main(){ 
B *temp = new B; 
B->SetID("0x12345678"); 
cout<<B->GetID()<<endl; 

return 0; 
} 

你大概的意思是:

int main(){ 
B *temp = new B; 
temp->SetID("0x12345678"); 
cout<<temp->GetID()<<endl; 

return 0; 
} 

這更像是你張貼的 「摘錄」。