Je suis relativement nouveau en C++ (alors essayez de garder les réponses simples s'il vous plaît!), Et je ne comprends pas pourquoi j'obtiens l'erreur: C++ requires a type specifier for all declarations whilst defining methods.
J'essaie d'écrire un programme simple pour lire un fichier texte ligne par ligne, stocker les valeurs dans un tableau. Cependant, je rencontre un problème lorsque j'essaie de déclarer des méthodes dans mon fichier .cpp. Veuillez trouver le code ci-dessous.
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
}
J'ai googlé en vain, je ne comprends pas encore comment lire la documentation appropriée pour C++, donc je suis un peu coincé. Jusqu'à présent, j'ai écrit environ 3 ou 4 programmes (simples) orientés objet et je n'ai jamais eu ce problème. Si cela aide, j'utilise Xcode, mais j'obtiens la même erreur dans Eclipse.
Il semble que n'importe quelle méthode, indépendamment du type de retour, du nom et des paramètres définis dans mon fichier principal, donne cette erreur - mais le constructeur va bien. Si PrintWords () est supprimé, le projet se construit très bien.
Tous les pointeurs seront très appréciés!
vous l'avez déclaré comme void
mais vous avez oublié de le mettre dans la définition. devrait être:
void StringList::PrintWords()
Votre fonction membre PrintWords
est prototypée comme:
void PrintOn();
Cela signifie qu'il renvoie void
. Lorsque vous implémentez votre fonction ailleurs, vous devez toujours fournir le type de retour, que vous avez par erreur omis:
/* void */ StringList::PrintOn() { ... }
Mettez un void
devant la ligne vous donnant des problèmes.
Même s'il semble redondant, vous devez spécifier le type de retour à la fois dans la déclaration et l'implémentation.