2012-06-02 42 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; 
} 

这更像是你张贴的 “摘录”。