2017-04-13 97 views
0

在我的OpenFile函數中,它應該提示用戶輸入文件名並將文件讀入數組。我不斷收到錯誤:no match for 'operator>>' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'entryType')。我做了一些研究,發現了一些與這個錯誤有關的類似問題。我沒有找到有用的問題,因爲他們寫得很差。我認爲問題可能是使用void函數或聲明數組作爲entryType的一部分。我知道我得到這個錯誤,因爲編譯器查找了一個可以處理(istream) >> (entryType)但沒有找到的函數。我將如何修復我的代碼以擺脫此錯誤?C++將文件讀入數組錯誤:'operator >>'不匹配

頭文件

include<string> 
using namespace std; 

enum Title {Mr, Mrs, Ms, Dr, NA}; 

struct NameType { 
    Title title; 
    string firstName; 
    string lastName; 
}; 

    struct AddressType { 
    string street; 
    string city; 
    string state; 
    string zip; 
}; 

struct PhoneType { 
    int areaCode; 
    int prefix; 
    int number; 
}; 

struct entryType { 
    NameType name; 
    AddressType address; 
    PhoneType phone; 
}; 

const int MAX_RECORDS = 50; 

代碼

entryType bookArray[MAX_RECORDS]; // entryType declared in header file 

int main() 
{ 
    entryType userRecord; 
    string filename; 
    ifstream inData; 
    char searchOption; 

    OpenFile(filename, inData); 

    MainMenu(inData, filename); 

    return 0; 
} 

void OpenFile(string& filename, ifstream& inData) 
{ 
    do { 
     cout << "Enter file name to open: "; 
     cin >> filename; 

     inData.open(filename.c_str()); 

     if (!inData) 
      cout << "File not found!" << endl; 

    } while (!inData); 


    if(inData.is_open()) 
    { 

     for(int i=0; i<MAX_RECORDS;i++) 
     { 
      inData >> bookArray[i]; 

     } 
    } 
} 
+4

「entryType」類型沒有'operator >>'。 'std :: ifstream'根本不知道如何從文件讀入'entryType'。你需要爲你的類型重載'operator >>'。看看[這個問題](http://stackoverflow.com/questions/4421706/operator-overloading)什麼運營商重載是如何做到這一點。 –

+0

@FrançoisAndrieux:我有點嫉妒OP。假設你會爲對象默認獲得一些很好的文件I/O行爲。在C++中。 – AndyG

+1

你在哪裏告訴計算機如何將一系列字符解釋爲一個'entryType'?你的C++書籍以什麼方式不解釋這一點? –

回答

0

你剛纔應該超載operator>>

std::istream& operator>>(std::istream& is, T& object) 
{ 
    // Read object from stream 
    return is; 
} 

其中T將是您創建的類型。

0
void OpenFile(string& filename, ifstream& inData) 
{ 
    do { 
     cout << "Enter file name to open: "; 
     cin >> filename; 

     inData.open(filename.c_str()); 

     if (!inData) 
      cout << "File not found!" << endl; 

    } while (!inData); 


if(inData.is_open()) 
{ 

    for(int i=0; i<MAX_RECORDS;i++) 
    { 
     inData >> bookArray[i].name.firstName; 

    } 
    } 
}