2014-09-27 3 views
-1

세 가지 다른 개체 유형 (UnsortedType, CompData, ItemType)에 대해 .h 파일을 포함하는 클라이언트 코드 파일이 있습니다. 또한 UnsortedType.h에는 #include ItemType.h가 있습니다.정의되지 않은 오류 및 재정의 된 오류

클라이언트 코드에 대한 헤더 가드와 UnsortedType 파일 내에 동일한 가드를 포함시킨 후 ObjectFromFile 함수에 대한 모호한 컴파일 오류 만 남았습니다. 함수를 주석 처리 할 때 UnsortedType 및 ItemType 데이터에 대해 여러 개의 정의되지 않은 오류가 발생하므로 다른 작업이 진행되고 있다는 느낌을받습니다.

이 프로그램은 inFile 개체 ItemType 항목에서 데이터를 가져 와서 특정 형식으로 변환하고 유효성을 검사 한 다음데이터의 특정 측면에 따라 UnsortedType의 특정 목록에 데이터를 추가합니다. (유효한, 유효하지 않은, RAM 및 디스크 크기, 노트북 데이터, 데스크톱 데이터).

#include <iostream> 
    #include <fstream> 
    #include <iomanip> 
    #include <string> 
    #include "UnsortedType.h" 
    #include "CompData.h" 
    #ifndef ITEM_TYPE_H 
    #define ITEM_TYPE_H 
    #include "ItemType.h" 
    using namespace std; 

    UnsortedType ObjectFromFile(ifstream& inFile, UnsortedType& list, CompDataType Data, ItemType& item, UnsortedType& laptopList, UnsortedType& desktopList, UnsortedTyp$ 
    void CompareRAMAndDisk(ItemType item, UnsortedType& RAMList); 
    void DoCommandP(ItemType& item, UnsortedType list, CompDataType Data, ofstream& outFile); 
    void DoCommandK(ofstream& outFile, UnsortedType& desktopList); 
    void DoCommandL(ofstream& outFile, UnsortedType& laptopList); 
    void DoCommandM(ofstream& outFile, UnsortedType RAMList); 
    void DoCommandD(UnsortedType& list, ItemType item); 
    UnsortedType DoCommandA(ifstream& inFile, UnsortedType& list, CompDataType Data, ItemType& item, UnsortedType& laptopList, UnsortedType& desktopList); 
    void PrintHeader(ofstream& outFile); 

    int main() 
    { 
    // declare and open file streams 
ifstream inFile; 
    ofstream outFile; 

    inFile.open("in.data"); 
    outFile.open("out.data"); 
    outFile.setf(ios::fixed); 
    outFile.precision(2); 

    ItemType item; 
    UnsortedType list; 
    UnsortedType laptopList; 
    UnsortedType desktopList; 
    UnsortedType RAMList; 
    UnsortedType invalidList; 
    CompDataType Data; 
    char command; 
    int length; 
    bool full; 
    bool found; 

    // Check input file 
    if(inFile.fail() || outFile.fail()) 
    { 
    cout << "File Failure" << endl; 
    return 1; 
    } 

    list.MakeEmpty(); 
    outFile << "*~< Lab Report >~" << endl; 

    while(inFile) 
    { 
    inFile >> command; 
    if(command == 'P') 
    { 
     invalidList.PrintList(outFile); 
     outFile << endl; 
length = list.LengthIs(); 
     if(length == 0) 
     { 
     outFile << "~->List is empty! No print!" << endl; 
     } 
    } 
    else 
    { 
     PrintHeader(outFile); 

     DoCommandP(item, list, Data, outFile); 
    } 

    if(command = 'A') 
    { 
    full = list.IsFull(); 
    if(full) 
     outFile << "~->List is full! No add!" << endl; 
    else 
invalidList = DoCommandA(inFile, list, Data, item, laptopList, desktopList); 
    } 
    if(command == 'D') 
    { 
    length = list.LengthIs(); 
    if(length == 0) 
     outFile << "~->List is empty! No delete!" << endl; 
    else 
     DoCommandD(list, item); 
    } 
    if(command == 'L') 
    { 
    DoCommandL(outFile, laptopList); 
    } 
    if(command == 'K') 
    { 
    DoCommandK(outFile, desktopList); 
    } 
    if(command == 'M') 
    { 
     DoCommandM(outFile, RAMList); 
    } 
    } 
    outFile << "*<end>*" << endl; 
    inFile.close(); 
    outFile.close(); 
    return 0; 
    } 
#endif 



//***************************************************************************************************************************** 
    void DoCommandP(ItemType& item, UnsortedType list, CompDataType Data, ofstream& outFile) 
    { 

    int length; 
    length = list.LengthIs(); 
    list.PrintList(outFile); 

    outFile << endl; 
    if(Data.numDesktop > 0) 
    outFile << "Average cost of Desktops: $" << item.avgCostOfDesktop() << endl; 

    else 
    outFile << "Average cost of Desktops: " << "No Desktops" << endl; 

    if(Data.numLaptop > 0) 
    outFile << "Average cost of Laptops: $" << item.avgCostOfLaptop() << endl; 

    else 
    outFile << "Average cost of Laptops: " << "No Laptops" << endl; 

    if(Data.numDesktop > 0 || Data.numLaptop > 0) 
    { 
    outFile << "High Price: $" << item.HighPriceComputer() << endl; 
    outFile << "Low Price: $" << item.LowPriceComputer() << endl; 
    } 
else 
    { 
    outFile << "High Price: " << "No valid computer data" << endl; 
    outFile << "LowPrice: " << "No valid computer data" << endl; 
    } 
    outFile << endl; 

    outFile << "SE135: %" << (Data.count135/length); 
    outFile << "SE136: %" << (Data.count136/length); 
    outFile << "SE145: %" << (Data.count145/length); 
    outFile << endl; 
    outFile << "*** " << Data.invalidCount << " Record"; 
    outFile << endl; 
    } 

    //********************************************************************************************** 
    UnsortedType ObjectFromFile(ifstream& inFile, UnsortedType& list, CompDataType Data, ItemType& item, UnsortedType& laptopList, UnsortedType& desktopList, UnsortedTyp$ 
    { 
    UnsortedType invalidList; 
    Data.computerTypeConvert = "l"; 
    Data.invalidCount = 0; 
    Data.numDesktop = 0; 
    Data.numLaptop = 0; 
    Data.count135 = 0; 
    Data.count136 = 0; 
    Data.count145 = 0; 

    item.ReadRd(inFile); 
    while(inFile) 
    { 
    // function calls for reading and assigning values to private data 
    Data.valid = item.ValidData(); 
    item.SetComputerType(Data.computerTypeConvert); 

    // Check data validity 
    if(Data.valid) 
    { 
     Data.computerType = item.ComputerTypels(); 
Data.location = item.Locationls(); 
     if(Data.computerType == "l") 
     { 
     item.FindAvgCostLaptop(); 
     Data.numLaptop = Data.numLaptop + item.NumberComputerls(); 
     laptopList.InsertItem(item); 
     } 
     if(Data.computerType == "d") 
     { 
     item.FindAvgCostDesktop(); 
     Data.numDesktop = Data.numDesktop + item.NumberComputerls(); 
     desktopList.InsertItem(item); 
     } 
     if(Data.numDesktop + Data.numLaptop > 0) 
     { 
     item.FindLowPriceComputer(); 
     item.FindHighPriceComputer(); 
     } 
     if(Data.location == "SE135") 
     Data.count135++; 
     if(Data.location == "SE136") 
     Data.count136++; 
     if(Data.location == "SE145") 
     Data.count145++; 
     CompareRAMAndDisk(item, RAMList); 
     list.InsertItem(item); 
     item.ReadRd(inFile); 
    } 
    else 
    { 
     Data.invalidCount++; 
     invalidList.InsertItem(item); 
    } 
    } 
    return invalidList; 
    } 
    //********************************************************************************************* 
    void PrintHeader(ofstream& outFile) 
{ 
    const string DASH8 = "--------"; 
    outFile << "*~< Lab Report >~*" << endl << endl; 
    outFile << left << setw(16) << "IdNumber" << setw(24) << "P R 0 C E S S O R" << setw(17) << "RAM Size"; 
    outFile << left << setw(15) << "Disk Size" << setw(17) << "Computer Type" << setw(12) << "C o s t"; 
    outFile << left << setw(9) << "Location" << endl; 
    outFile << left << setw(16) << DASH8 << setw(24) << "-----------------" << setw(17) << DASH8; 
    outFile << left << setw(15) << "---------" << setw(17) << "-------------" << setw(12) << DASH8; 
    outFile << left << setw(9) << DASH8 << endl; 

    } 
    //************************************************************************************************************** 
    UnsortedType DoCommandA(ifstream& inFile, UnsortedType& list, CompDataType Data, ItemType& item, UnsortedType& RAMList, UnsortedType& laptopList, UnsortedType& deskt$ 
    { 
    UnsortedType invalidList; 
    invalidList = ObjectFromFile(inFile, list, Data, item, laptopList, desktopList, RAMList); 
    return invalidList; 
    } 
    //******************************************************************************************* 
    void DoCommandD(UnsortedType& list, ItemType item) 
    { 
    list.DeleteItem(item); 
    } 
    //****************************************************************************************** 
    void DoCommandK(ofstream& outFile, UnsortedType& desktopList) 
    { 
    desktopList.PrintList(outFile); 
    } 
    //****************************************************************************************** 
    void DoCommandL(ofstream& outFile, UnsortedType& laptopList) 
    { 
    PrintHeader(outFile); 
    laptopList.PrintList(outFile); 
    } 
    //****************************************************************************************** 
    void DoCommandM(ofstream& outFile, UnsortedType RAMList) 
    { 
    bool ramData; 
PrintHeader(outFile); 
    RAMList.PrintList(outFile); 
    } 
    //****************************************************************************************** 
    void CompareRAMAndDisk(ItemType item, UnsortedType RAMList) 
    { 
    string RAMInt; 
    string DiskInt; 
    string RAM; 
    string Disk; 
    int index; 

    Disk = item.Diskls(); 
    RAM = item.RAMls(); 
    index = Disk.find(' '); 
    DiskInt = Disk.substr(0, (index - 1)); 
    Disk = Disk.substr(index); 

    index = RAM.find(' '); 
    RAMInt = RAM.substr(0, (index - 1)); 
    RAM = RAM.substr(index); 

    if((RAMInt >= "16" && RAM == "GB") && (DiskInt == "2" && Disk == "TB")) 
    RAMList.InsertItem(item); 
    } 

//***************************************************************************************** 

어떤 도움을 환영합니다 :

runItemType.cxx: In function âUnsortedType ObjectFromFile(std::ifstream&, UnsortedType&,  CompDataType, ItemType&, UnsortedType&, UnsortedType&, UnsortedType&)â: 
runItemType.cxx:215: error: âCompareRAMAndDiskâ was not declared in this scope 

가 여기 내 클라이언트 코드 :

여기 내 오류입니다! (! 당신이 논리의 오류를 볼 경우에도, 나는 일반적으로 내 자신에 그들을 해결할 수 알려 주시기 바랍니다, 그러나 빨리 나는 더 나은이 완료!)

+0

SO는 실제로 디버깅 서비스가 아닙니다. –

답변

0

가장 중요한 문제는 내가 컴파일하는 방법이었습니다. 그 문제가 해결되었습니다.

0

당신은 선언입니다 기능 :

void CompareRAMAndDisk(ItemType item, UnsortedType& RAMList); 

이고 함수 정의는 다음과 같습니다.

void CompareRAMAndDisk(ItemType item, UnsortedType RAMList); 

차이점을 확인하십시오. 그 모습에서 함수 정의를 변경하여 UnsortedType &을 사용하고자 할 것입니다.

+0

오류는 여전히 존재하며 디버깅 장치가 아닌 것으로 의견을 말한 사람에게는 오류가 있습니다. 프로그래머를위한 거대한 도구는 책상 둘러보기와 지식 축적입니다. 그러나 한 프로그래머가 문제가 무엇인지 항상 알 수는 없습니다. 그것은 신선한 눈이 들어오는 곳입니다. 또한 모든 오류를 해결하는 방법을 알 수있는 방법이 없습니다! 기본적인 수정을 마친 후에는 더 많은 지식을 얻기 위해 여기에 왔습니다. 나는이 사이트를 통해 도움을 얻는 동안 배우고있다. 그게 긍정적이지 않습니까? – 5unnyr4y3

+0

'UnsortedType & deskt $'는 복사 - 붙여 넣기 오류라고 가정합니다. 불행히도, 당신은 우리에게 모든 코드를 제공하지 않았거나, 더 나아가 그것을 행동을 보여주는 짧고 독립적 인 컴파일 가능한 예제로 축소 시켰습니다. – uesp