Fout C++ vereist een typespecificatie voor alle declaraties tijdens het definiëren van methoden

Ik ben relatief nieuw in C++ (dus probeer de antwoorden alstublieft eenvoudig te houden!), en ik begrijp niet waarom ik de foutmelding krijg: C++ requires a type specifier for all declarations whilst defining methods.

Ik probeer een eenvoudig programma te schrijven om een ​​tekstbestand regel voor regel te lezen en de waarden in een array op te slaan. Ik ondervind echter een probleem bij het declareren van methoden in mijn .cpp-bestand. Hieronder vindt u de code.

StringList.h

#ifndef StringListH
#define StringListH
#include <vector>
#include <string>
class StringList {
public:
     StringList();
     ~StringList();
     void PrintWords();
private:
     size_t numberOfLines;
     std::vector<std::string> str;
};
#endif

StringList.cpp

#include "StringList.h"
#include <fstream>
#include <istream>
#include <algorithm> // std::copy
#include <iterator>  // istream_iterator
using namespace std;
StringList::StringList()
{
    ifstream myfile("input.in");
    if (myfile.is_open())
    {
        copy(
            istream_iterator<string>(myfile),
            istream_iterator<string>(),
            back_inserter(str));
    }
    numberOfLines = str.size();
}
StringList::~StringList(){
    //Deconstructor
}
// Error Happens Here
StringList::PrintWords(){
    //Print My array
}

Ik heb tevergeefs gegoogled, ik begrijp nog niet helemaal hoe ik de juiste documentatie voor C++ moet lezen, dus ik zit een beetje vast. Ik heb tot nu toe ongeveer 3 of 4 (eenvoudige) objectgeoriënteerde programma’s geschreven en ik heb dit probleem nooit gehad. Als het helpt, gebruik ik Xcode, maar ik krijg dezelfde foutmelding in Eclipse.

Het lijkt erop dat elke methode, ongeacht het retourtype, de naam en de parameters die in mijn hoofdbestand zijn gedefinieerd, deze fout geeft, maar de constructor is in orde. Als PrintWords() is verwijderd, wordt het project prima opgebouwd.

Alle tips worden zeer op prijs gesteld!


Antwoord 1, autoriteit 100%

je hebt het verklaard als void maar je bent vergeten het in de definitie te zetten. zou moeten zijn:

void StringList::PrintWords()


Antwoord 2, autoriteit 20%

Uw ledenfunctie PrintWords is geprototypeerd als:

void PrintOn();

Wat betekent dat het void retourneert. Wanneer u uw functie elders implementeert, moet u nog steeds het retourtype opgeven, dat u per ongeluk hebt weggelaten:

/* void */ StringList::PrintOn() { ... }

Antwoord 3, autoriteit 17%

Zet een void voor de regel die u problemen geeft.

Hoewel het overbodig lijkt, moet u het retourtype zowel in de aangifte als in de implementatie specificeren.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes