2017-05-02 4 views
1

以下のコードをご覧ください: 私はクラスfacultyTypeを持っていて、メインで250クラスのオブジェクトの配列を作成しました。 Faculty(facultyTypeの配列)を渡す印刷メソッドの が、プログラムの呼び出しを停止してコンパイルエラーが発生したときに呼び出されます。 printメソッドのすべてのfacultyTypeを繰り返し処理し、そのメンバー関数にアクセスしたいと考えています。同じ作業をうまくやっているJavaでは、なぜここではうまくいかないのでしょうか?C++でcoustomクラスの配列から各オブジェクトを反復し、そのメンバ関数にアクセスするには?

#include<iostream> 
#include<string> 
using namespace std; 
class facultyType 
{ 
private: 
    string firstname; 
    string lastname; 
    string department; 
    double salary; 
    int serviceyears; 
public: 
    facultyType(){} 
    void print(facultyType* faculty,int count); 
    void setAll(facultyType faculty[],float percent,int count); 
    //setter and getter 
}; 
void facultyType::print(facultyType* faculty,int count)//need help here 
{ 
    int i; 
    for(i=0;i<count;i++) 
    { 
    //want to iterate all facultyType one by one 
     facultyType f=faculty[i];//here the problem 

     int serviceYear; 
     serviceYear =f.getServiceYears();//not getting the exact values 
     cout<<"service year "<<serviceYear<<endl; 
     cout<<"dfhh"<<endl; 
     if(serviceYear>=15) { 
      cout<<f.getFirstName()<<"\n"<<f.getLastName()<<"\n" 
       <<f.getDepartment(); 
      cout<<f.getSalary()<<"\n"<<f.getServiceYears()<<endl; 
      cout<<"-------------------------------------------------\n"; 
     } 
    } 
} 

int main() 
{ 
    facultyType Faculty[250]; 
    facultyType f; 
    int count=0; 
    int status=0; 
    string fname,lastname,depart; 
    double sal; 
    int serviceyears; 
    while(status!=4) 
    { 
     cout<<"1. Add new Faculty member"<<endl; 
     cout<<"2. increase all faculty member salary"<<endl; 
     cout<<"3. Print Employee"<<endl; 
     cout<<"4. Exit"<<endl; 

     cin>>status; 

     switch(status) 
     { 
      case 1: 
      { 
       cout<<"Enter first name : "; 
        cin>>fname; 
        //..other code for setter and getter values 
        Faculty[count]=newFaculty; 
        count++; 
        break; 
       } 

      case 3:{ 
       f.print(Faculty,count);//calling print method 
       break; 
      } 
      case 4: break; 
     } 

    } 

    return 0; 
} 

私はその暗い質問を知っていますが、私はC++の新機能です。 なぜJavaと異なるのか説明してください。 ありがとうございます。

+0

は、あなたが(たとえば、gdbでの)デバッグを試してみました:

私が使用してGNU/Linux上でそれをコンパイル?もしそうなら、gdbにエラーが表示されているかどうか教えてください。実際にこの点に到達していることを証明するために、印刷機能でいくつかのブレークポイントを設定してみてください。 – tknbr

答えて

3

"ゲッター"関数は実際に何も返さないという問題があります。あなたの編集の前にfacultyType::setServiceYearsは、次のように実装されました:

int facultyType::getServiceYears() 
{ 
    serviceyears; 
} 

それは(returnキーワードを追加すること)されている必要があります。

int facultyType::getServiceYears() 
{ 
    return serviceyears; 
} 

これは警告が有効になっていると、コンパイラによって捕まるエラーの種類であります。 g++ test.cpp -ggdb -O0 -Wall -Wextra -pedantic

+0

それは人生の節約に感謝しましたが、まだ私はそれほど私は愚かではないと思っています( – Roushan45

+0

@ Roushan45問題ありません。あなたを助けた答えを受け入れることは良い習慣です。 – Jonas

関連する問題