2009-07-14 188 views
24

このプログラムは、ユーザ入力name/ageのペアを持ち、クラスを使用して出力します。 ここにコードがあります。私は関数を呼び出すしようとしているときint main()オブジェクトなしでメンバ関数を呼び出すことはできません

#include "std_lib_facilities.h" 

class Name_pairs 
{ 
public: 
     bool test(); 
     void read_names(); 
     void read_ages(); 
     void print(); 
private: 
     vector<string>names; 
     vector<double>ages; 
     string name; 
     double age; 
}; 

void Name_pairs::read_names() 
{ 
    cout << "Enter name: "; 
    cin >> name; 
    names.push_back(name); 
    cout << endl; 
} 

void Name_pairs::read_ages() 
{ 
    cout << "Enter corresponding age: "; 
    cin >> age; 
    ages.push_back(age); 
    cout << endl; 
} 

void Name_pairs::print() 
{ 
    for(int i = 0; i < names.size() && i < ages.size(); ++i) 
      cout << names[i] << " , " << ages[i] << endl; 
} 

bool Name_pairs::test() 
{ 
    int i = 0; 
    if(ages[i] == 0 || names[i] == "0") return false; 
    else{ 
     ++i; 
     return true;} 
} 


int main() 
{ 
    cout << "Enter names and ages. Use 0 to cancel.\n"; 
    while(Name_pairs::test()) 
    { 
    Name_pairs::read_names(); 
    Name_pairs::read_ages(); 
    } 
    Name_pairs::print(); 
    keep_window_open(); 
} 

しかし、私はそれがvariable.testまたはvariable.read_namesような何かを探しているので、これは推測している"cannot call 'whatever name is' function without object."を取得します。これを修正するにはどうすればいいですか?

答えて

29

メンバー関数を呼び出すには、オブジェクトをインスタンス化する必要があります。メンバ関数には操作対象のオブジェクトが必要です。彼らはただ自分で使うことはできません。 main()機能は、例えば、次のようになります。

int main() 
{ 
    Name_pairs np; 
    cout << "Enter names and ages. Use 0 to cancel.\n"; 
    while(np.test()) 
    { 
     np.read_names(); 
     np.read_ages(); 
    } 
    np.print(); 
    keep_window_open(); 
} 
17

あなたがそのようにそれらを呼び出したい場合は、あなたがそれらを静的に宣言する必要があります。

+0

不可は、すべてのメソッドは、メンバープロパティの名前、年齢、名前、年齢の一つ以上にアクセスするためのオブジェクトコンテキストを必要とするので。 (静的であってもかまいませんが、その後は全く役に立たないでしょう;-)) – VolkerK

+0

ありがとうございます。私の場合は正しい。 'static'キーワードを入れるのを忘れた – jondinham

1

あなたは正しいです - 新しい使用定義型(Name_pairs)を宣言し、それを使用するにはその型の変数が必要です。

コードは次のように行く必要があります。

Name_pairs NP。この場合

np.read_names()

関連する問題