2013-03-10 2 views
0

Таким образом, существуют два класса в отдельных заголовочных файлахФункция друга, ожидаемое первичное выражение раньше. токен

Клиент. h

using namespace std; 
#include <iostream> 

class Customer{ 
    friend void Display(); 
private: 
    int number, zipCode; 
public: 
    Customer(int N, int Z){ 
    number = N; 
    zipCode = Z; 
    } 
}; 

Город. h с использованием пространства имен std; #include #include "customer.h"

class City{ 
    friend void Display(); 
private: 
    int zipCode; 
    string city, state; 
public: 
    City(int Z, string C, string S){ 
     zipCode = Z; 
     city = C; 
     state = S; 
    } 
}; 

мой main.cpp выглядит следующим образом

#include "City.h" 
#include "Customer.h" 

void Display(){ 
     cout<<"Identification Number: "<<Customer.number<<endl 
       <<"Zip Code: "<<Customer.zipCode<<endl 
       <<"City: "<<City.city<<endl 
       <<"State: "<<City.state<<endl; 
    } 


int main() { 
    Customer A(1222422, 44150); 
    City B(44150, "Woklahoma", "Kansas"); 

    Display(); 

} 

Я хорошо с основами C++, но это, где я не понимаю , так что мой конкретный вопрос, является .... Почему для четырех линий моей функции дисплея делает компилятор скажите мне «ошибка: ожидается, первичное-выражение перед лексема".»

Спасибо заранее, Макера

ответ

1

Customer - это тип. Вам нужен объект этого типа для доступа к его члену number (и то же самое для остальных строк).

вероятно Вы имели в виду взять Customer и City в качестве аргументов для Display:

void Display(Customer customer, City city){ 
    cout<<"Identification Number: "<<customer.number<<endl 
      <<"Zip Code: "<<customer.zipCode<<endl 
      <<"City: "<<city.city<<endl 
      <<"State: "<<city.state<<endl; 
} 

Затем передать ваши Customer и City объекты этой функции:

Display(A, B); 
+0

ouch да, я вижу, я пытаюсь получить доступ к этим полям, как будто они статичны. –

1

Вы пытаетесь получить доступ к членам данных от имени класса

Customer.number 

Вы не можете сделать это. Вам нужен Customer экземпляр:

Customer c; 
std::cout << c.number; 

Вы, вероятно, хотите изменить Display() к

void Display(const Customer& c); 

затем использовать его как это:

Customer A(1222422, 44150); 
Display(A); 

и аналогично для City.

+0

Спасибо Я следую за то, что вы и sftrabbit сказал , и используйте функцию, которую я только что узнал о «Форвардной декларации», и все это отлично работало. –

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