2009-07-14 2 views
24

Эта программа имеет пользовательский ввод name/age пар, а затем выводит их, используя класс. Вот код.не может вызвать функцию-член без объекта

#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(); 
} 

Однако в int main(), когда я пытаюсь вызвать функции я получаю "cannot call 'whatever name is' function without object." Я предполагаю, что это потому, что он ищет что-то вроде variable.test или variable.read_names. Как мне это исправить?

ответ

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

спасибо. правильный для моего дела. забыл поставить ключевое слово «статическое» – jondinham

1

Вы правы - вы указали новый тип использования (Name_pairs), и вам нужна переменная этого типа для его использования.

Код должен идти, как это:

Name_pairs нп;

np.read_names()

Смежные вопросы