Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Ein und Ausgabe von Txt Dateien

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.06.2017, 20:01 Uhr
Gash



Hallo Community,

ich habe ein kleines Problem mit meinem code. Und zwar will ich eine Txt-Datei mit verschiedenen Städten Einlesen und Ausgeben. Diese umfassen (Stadtname,Einwohnerzahl,Land,Erdteil).

Bsp: Belgrad; 1.113.589; Serbien; Europa

Wenn ich compile wird mir diese Fehlermeldung angezeigt:

Error C3867 'Town::getErdteil': non-standard syntax; use '&' to create a pointer to member


Code:
void ausgabe(vector<Town>vtown)
{
    for (unsigned int i = 0; i < vtown.size(); i++)
    {
        cout << "Name: " << vtown[i].getName() << endl;
        cout << "Einwohnerzahl: " << vtown[i].getEinwohnerzahl() << endl;
        cout << "Land: " << vtown[i].getLand() << endl;
        FEHLERMELDUNG: cout << "Erdteil: " << vtown[i].getErdteil << endl;
    }
}



Warum bekomme ich diesen Fehler nur bei der methode getErdteil und nicht bei den vorherigen?
Ich verstehe den Fehler einfach nicht und habe alles probiert, aber komme nicht weiter.

Ich wäre seh Dankbar für eure Hilfe.

Hier der Code aufgeteilt in Town.h,Town.cpp und main


Code:
main Datei:


#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include "Town.h"
#include <sstream>

using namespace std;

vector<string>split(const string &s, const string &trenn){
vector<string> v;
string::size_type start{ 0 };
string::size_type pos;

do
{
    pos = s.find_first_of(trenn, start); // Suche erste Position des trennzeichens
    v.push_back(s.substr(start, pos - start)); // Füge alles bis zum Trennzeichen in Vector V ein
    start = pos + 1; // Schalte weiter auf string nach dem Trennzeichen
    //cout << "split: " << pos;

} while (pos != string::npos); //Höre auf bei stringende
return v;
}

string trim(string str)
{
    // trim leading spaces
    size_t startpos = str.find_first_not_of(" \t"); // Suche erstes Zeichen != Leerzeichen oder Tabulator
    if (string::npos != startpos)
    {
        str = str.substr(startpos); // String verkürzen
    }
    return str;
}

void ausgabe(vector<Town>vtown)
{
    for (unsigned int i = 0; i < vtown.size(); i++)
    {
        cout << "Name: " << vtown[i].getName() << endl;
        cout << "Einwohnerzahl: " << vtown[i].getEinwohnerzahl() << endl;
        cout << "Land: " << vtown[i].getLand() << endl;
        cout << "Erdteil: " << vtown[i].getErdteil << endl;
    }
}
    
void datenEinlesen(vector<Town>vtown)
{
    string name;
    string land;
    string einwohner;
    string erdteil;
    string trash;
    string zeile;

    vector<string> v; // Für Split

    ifstream f;
    f.open("C:Project42/Project42/Town.txt", ios::in);

    if (f.fail())
    {
        cout << "datei kann nicht gelesen werden!" << endl;
        return;
    }
    
    cout << "Lese Datei!" << endl;

    getline(f,trash); // Löschen der ersten 3 Zeilen in Textdatei
    getline(f,trash);
    getline(f,trash);

    while (!f.eof()) // Lese bis zum Dateiende = EOF
    {
        getline(f, zeile); // Eine Zeile lesen

        v = split(zeile, ";"); // Zeile in Elemente zerlegen trennzeichen ist Semikolon

        // Trim :: Führende Leerzeichen entfernen
        name = trim(v[0]); //Erstes Element = Stadt Name
        einwohner= trim(v[1]);
        land = trim(v[2]);
        erdteil = trim(v[3]);
        
        vtown.push_back(Town(name, einwohner, land, erdteil));

    }
        //f.close();
    
        cout << "Aktuelle Zahl an Eintraegen: ";
        cout << static_cast<int> (vtown.size()) << endl;
        
}

int main()
{
    int Auswahl = 0;

    vector<Town>vtown;
    vector<Town>sv1;

    while (Auswahl != 5)
    {
        cout << " Konsolenmenue: " << endl << endl;
        cout << " [1] Alle Städte sortiert nach Land und Namen ausgeben " << endl;
        cout << " [2] Alle Städte sortiert nach Land und Einwohnerzahl ausgeben " << endl;
        cout << " [3] Länder und Gesamteinwohnerzahl in Millionenstädten ausgeben " << endl;
        cout << " [4] Alle Städte sortiert nach Einwohnerzahl im Jahr 2050 ausgeben " << endl;
        cout << " [5] Programm beenden " << endl;
        cin >> Auswahl;

        switch (Auswahl)
        {
        case 1:
            //sv1 = sort1(vtown);
            //ausgabe(sv1);
            break;
        case 2:
            break;
        case 3:
            ausgabe(vtown);
            break;
        case 4:
            break;
        case 5:
            break;
        default:
            cout << "Falsche Eingabe...";
            break;
        }
    }
    system("pause");

    return 0;
}




Code:

Town.h Datei

#pragma once
#include <string>

using namespace std;

class Town
{
private:
    string name;
    string einwohnerzahl;
    string land;
    string erdteil;

public:
    Town();
    Town(string, string, string, string);
    ~Town();

    //Setter

    void setName(string);
    void setEinwohnerzahl(string);
    void setLand(string);
    void setErdteil(string);
    
    //Getter

    string getName() const { return name; }
    string getEinwohnerzahl() const { return einwohnerzahl; }
    string getLand() const { return land; }
    string getErdteil() const { return erdteil; }

    friend ostream &operator<< (ostream &ostr, Town &t);
};





Code:

Town.cpp Datei


#include "Town.h"

using namespace std;

ostream &operator<< (ostream &ostr, Town &t)
{
    ostr << t.name << ";" << t.einwohnerzahl << ";" << t.land << ";" << t.erdteil << endl;
    return ostr;
}

Town::Town()
{

}

Town::Town(string sname, string seinwohner, string sland, string serdteil)
{
    name = sname;
    einwohnerzahl = seinwohner;
    land = sland;
    erdteil = serdteil;
}

void Town::setName(string sname)
{
    name = sname;
}

void Town::setEinwohnerzahl(string seinwohner)
{
    einwohnerzahl = seinwohner;
}

void Town::setLand(string sland)
{
    land = sland;
}

void Town::setErdteil(string serdteil)
{
    erdteil = serdteil;
}

Town::~Town()
{
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.06.2017, 21:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
FEHLERMELDUNG: cout << "Erdteil: " << vtown[i].getErdteil << endl;



Naja - getErdteil ist eine Methode- du rufst sie da nur nicht auf ("()" fehlt)

Da man auch Pointer auf Funktionen/Methoden anlegen kann - meckert der Compiler an der Stelle, da man sich den Pointer explizit holen muss
--
class God : public ChuckNorris { };

Dieser Post wurde am 01.06.2017 um 21:32 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: