Kompilatoren feil med` << `

stemmer
0

Jeg har jobbet med å få dette programmet komplett der det sparer flere structs til en fil, kan lese dem tilbake og redigere dem, og deretter lagre dem tilbake til en fil. Jeg har jobbet med logikken i dette og ikke minst massevis av hjelp fra andre, og massevis av googling timer ... nå får jeg en kompileringsfeil. Eventuelle hjelpe ville være meget verdsatt.

Kode:

template<typename T>
void writeVector(ofstream &out, const vector<T> &vec);

struct InventoryItem {
    string Item;
    string Description;
    int Quantity;
    int wholesaleCost;
    int retailCost;
    int dateAdded;
} ;


int main(void)
{
    vector<InventoryItem> structList;
    ofstream out(data.dat);
    writeVector( out, structList );
    return 0;
}

template<typename T>
void writeVector(ofstream &out, const vector<T> &vec)
{
    out << vec.size();

    for(vector<T>::const_iterator i = vec.begin(); i != vec.end(); i++)
    {
        out << *i; //  error C2679
    }
}

Kompilator feil:

1>.\Project 5.cpp(128) : error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const InventoryItem' (or there is no acceptable conversion)
// listed overload variants skipped
1>        while trying to match the argument list '(std::ofstream, const InventoryItem)'
1>        .\Project 5.cpp(46) : see reference to function template instantiation 'void writeVector<InventoryItem>(std::ofstream &,const std::vector<_Ty> &)' being compiled
1>        with
1>        [
1>            _Ty=InventoryItem
1>        ]
Publisert på 02/04/2009 klokken 06:00
kilden bruker
På andre språk...                            


3 svar

stemmer
8

Du har ingen operator<<definert som vil angi hvordan InventoryItemskal skrives til en output stream. Du prøver å skrive den ut og kompilatoren ikke vet hvordan. Du må definere en funksjon som dette:

std::ostream& operator<<(std::ostream &strm, const InventoryItem &i) {
  return strm << i.Item << " (" << i.Description << ")";
}
Svarte 02/04/2009 kl. 06:15
kilden bruker

stemmer
0

Den << Operatøren er definert som "skift-bits venstre".

IO klasser styre dette operatør og definere << å bety skrive ut denne strukturen.

Når kompilatoren ser et heltall element på høyre side det forutsetter at du mener "Shift bots venstre" og er på utkikk etter en intger på venstre side, men finner en IO stream objekt i stedet.

Prøve expiciltly omdannelse av heltallsverdien til strengen før den sendes til den strømmen.

Svarte 02/04/2009 kl. 06:38
kilden bruker

stemmer
0

Du prøver å bruke <<operatør for din struct, men at operatøren ikke er definert for denne typen. Prøv å gi ut spesifikke data medlemmer i stedet.

Svarte 02/04/2009 kl. 06:05
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more