C ++ Ни один из моих файлов не имеет тип - PullRequest
0 голосов
/ 14 февраля 2012

Итак, я разбил свои файлы на несколько частей, и теперь я получаю кучу ошибок типа.Например:

phoneNUmber.h 'istream does not name a type'

Что это значит именно?Вот мои файлы, они довольно короткие.

Основной

#include <iostream>
#include <fstream>
#include <string>
#include "phoneEntry.h"
using namespace std;

int main()
{   
    PhoneEntry entry;
    ifstream filezilla;
    filezilla.open("phone.txt");

    if(filezilla)
    {
        while(!filezilla.eof() && entry.readEntry(cin))
        {
            entry.writeEntry(cout);
        }
    }
    else
    {
        cout << "Four Oh Four - File Not Found" << endl;
    }

    return 0;
}

Телефонный номер

#include "phoneNumber.h"

class PhoneEntry
{
    private: 
        PhoneNumber phone;
        string firstName,
               lastName;
        void _writeDots(ostream& fout, int n) const;
    public:
        istream& readEntry(istream&);
        ostream& writeEntry(ostream&) const;

};

istream& PhoneEntry::readEntry(istream& Sin)                    
{
    Sin >> firstName >> lastName;
    phone.readNumber(Sin);

    return Sin;
};

ostream& PhoneEntry::writeEntry(ostream& Sout) const            
{   
    const int num = 28;
    int fill = num - ((firstName + lastName).length());

    Sout << firstName << ", " << lastName;

    _writeDots(Sout, fill);
    phone.writeNumber(Sout);

    return Sout;
};

void PhoneEntry::_writeDots(ostream& fout, int n) const
{
    if(n % 2)
    {
        fout << ".";
    }

    for(int i = 0; i < n; i++)
    {
        fout << " .";
    }
};

PhoneNumber

class PhoneNumber
{
    private: 
        int areaCode, 
            prefix, 
            suffix;
    public: 
        istream& readNumber(istream&);
        ostream& writeNumber(ostream&) const;
};

istream& PhoneNumber::readNumber(istream& Sin)                  
{
    Sin >> areaCode >> prefix >> suffix;
    return Sin;
};

ostream& PhoneNumber::writeNumber(ostream& Sout) const          
{
    Sout << " " << areaCode << "-" << prefix << "-" << suffix << endl;
    return Sout;
};

1 Ответ

2 голосов
/ 14 февраля 2012

Что это значит?

Это означает, что компилятор считает ifstream именем переменной без ассоциированного типа. Он думает так, потому что ему не было дано определение класса для ifstream из-за того, что вы пропустили правильные включаемые файлы:

#include <iostream>
#include <fstream>
#include <string>

Кроме того, в PhoneEntry.cpp и PhoneNumber.cpp

везде, где у вас есть istream, оно должно быть std::istream

То же самое с ostream и ifstream и т. Д.

В вашем main.cpp есть следующий оператор using namespace std;, который импортирует пространство имен std в глобальное пространство имен, поэтому внутри этого файла вам не нужно добавлять пространство имен std:: ко всем вызовам iostream. .

Поскольку вы разделяете вещи, каждый новый файл cpp больше не имеет std:: в своем глобальном пространстве имен, поэтому вы должны сделать это самостоятельно.

Вы можете добавить using namespace std; в ваши файлы cpp, но я обычно этого не делаю.

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