2012-02-14 2 views
0

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

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; 
}; 
+0

Вы пытались положить '#include ' в свой файл PhoneNumber.h? –

+0

, но я включил его из файла с main(), поэтому он должен просочиться прямо в phoneNumer? он отправляется в phoneEntry на номер телефона, так что я не должен его использовать? –

+0

мой C++ - fu слабый, но спрашивает, зачем вам нужно, это будет хороший последующий вопрос. –

ответ

2

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

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

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

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

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

то же самое с ostream и ifstream т.д.

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

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

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

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