Проблема с доступом к переменным класса при использовании заголовочных / исходных файлов - PullRequest
1 голос
/ 24 декабря 2011

Я пытаюсь использовать заголовочные файлы и их исходные файлы, но когда я пытаюсь получить доступ к классам внутри них, у меня возникает небольшая проблема, вот код для моего заголовочного файла:

// person.h

namespace PersonFuncs
{
class Person;

void getValues ( Person& );
void setValues ( Person& );
}

И мой исходный файл заголовков:

// person.cpp
#include <iostream>
#include <string>
#include "person.h"

using namespace std;    

namespace PersonFuncs
{
    class Person
    {
    private:
        string name; // Declaring string variable to hold person's name
        int height; // Declaring integer variable to hold person's height
    public:
        string getName() const; // Reads from 'name' member variable
        void setName ( string ); // Writes to the 'name' member variable
        int getHeight() const; // Reads from the 'height' member variable
        void setHeight ( int ); // Writes to the 'height' member variable
    };

    string Person::getName() const
    {
        return name;
    }
    void Person::setName ( string s )
    {
        if ( s.length() == 0 ) // If user does not input the name then assign with statement
            name = "No name assigned";
        else // Otherwise assign with user input
            name = s;
    }
    int Person::getHeight() const
    {
        return height;
    }
    void Person::setHeight ( int h )
    {
        if ( h < 0 ) // If user does not input anything then assign with 0 (NULL)
            height = 0;
        else // Otherwise assign with user input
            height = h;
    }

    void getValues ( Person& pers )
    {
        string str; // Declaring variable to hold person's name
        int h; // Declaring variable to hold person's height

        cout << "Enter person's name: ";
        getline ( cin, str );

        pers.setName ( str ); // Passing person's name to it's holding member

        cout << "Enter height in inches: ";
        cin >> h;
        cin.ignore();

        pers.setHeight ( h ); // Passing person's name to it's holding member
    }
    void setValues ( Person& pers )
    {
        cout << "The person's name is " << pers.getName() << endl;
        cout << "The person's height is " << pers.getHeight() << endl;
    }
}

Из которых оба компилируются без ошибок вообще!Но с приведенным ниже фрагментом кода, где, как вы, вероятно, видите, я пытаюсь использовать класс Person:

// Person_Database.cpp

#include <iostream>
#include "person.h"

using namespace std;
using namespace PersonFuncs

int main()
{
    Person p1; // I get an error with this

    setValues ( p1 );

    cout << "Outputting user data\n";
    cout << "====================\n";

    getValues ( p1 );

    return 0;
}

Ошибка компилятора (MS Visual C ++), которую я получаю:1011 *

и

setValues cannot convert an int
getValues cannot convert an int

или что-то в этом роде.

У кого-нибудь есть идеи в том, что я сделал неправильно?или есть определенный способ доступа к переменным в классе?

1 Ответ

1 голос
/ 24 декабря 2011

Полная декларация класса Person должна быть доступна для компилятора, когда он компилирует main.

. Вы должны поместить определение класса в заголовочный файл (и включить его в основной файл).).Вы можете оставить реализацию функций-членов в отдельном файле .cpp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...