Fonction statique: une classe de stockage ne peut pas être spécifié ici
J'ai défini une fonction statique dans ma classe de cette manière (extrait de code correspondant)
#ifndef connectivityClass_H
#define connectivityClass_H
class neighborAtt
{
public:
neighborAtt(); //default constructor
neighborAtt(int, int, int);
~neighborAtt(); //destructor
static std::string intToStr(int number);
private:
int neighborID;
int attribute1;
int attribute2;
#endif
et dans le .fichier cpp comme
#include "stdafx.h"
#include "connectivityClass.h"
static std::string neighborAtt::intToStr(int number)
{
std::stringstream ss; //create a stringstream
ss << number; //add number to the stream
return ss.str(); //return a string with the contents of the stream
}
et j'obtiens une erreur (VS C++ 2010) dans le .fichier cpp en disant: "Une classe de stockage ne peut pas être spécifié ici" et je ne peux pas comprendre ce que je fais mal.
p.s. J'ai déjà lu cette qui ressemble à un doublon, mais je ne sais pas - comme il le fait - que je suis droit et le compilateur est capricieux. Toute aide est appréciée, je ne trouve aucune information sur ce!
OriginalL'auteur sccs | 2013-03-31
Vous devez vous connecter pour publier un commentaire.
Dans la définition de la
.cpp
fichier, supprimer le mot-cléstatic
:Aussi longtemps que vous avez le
static
mot-clé dans le fichier d'en-tête, le compilateur sait que c'est une méthode de classe statique, de sorte que vous ne peut et ne doit le préciser dans la définition dans le fichier source.En C++03, le classe de stockage des prescripteurs sont les mots-clés
auto
,register
,static
,extern
, etmutable
, qui indiquent au compilateur comment les données sont stockées. Si vous voyez un message d'erreur faisant référence à la classe de stockage de prescripteurs, vous pouvez être sûr que c'est en se référant à l'un de ces mots-clés.En C++11, le
auto
mot a un sens différent (il n'est plus une classe de stockage prescripteur).mutable
? Il apparaît comme un stockage-classe-rédacteur de devis à la BNF, mais il ne se comporte pas comme un. Etthread_local
EST une classe de stockage spécificateur de C++11.Oui, C++03 §7.7.1 explicitement la liste de ces 5 prescripteurs.
OriginalL'auteur Adam Rosenfield