Unqualified-id de l'avant constante de chaîne
Sur la compilation de code suivant je reçois l'erreur "expected unqualified-id de l'avant constante de chaîne"
In file "Notification_Constants.h"
namespace NOTIFICATION_CONSTANTS
{
#define SERVICE_EMAIL "[email protected]"
}
Dans le fichier SendEmail.cpp
#include "Notification_Constants.h"
void UserPreferences::get_senders_email(String &_email)
{
_email = NOTIFICATION_CONSTANTS::SERVICE_EMAIL;
}
Si je l'affecter comme suit ce qu'elle fonctionne correctement, ce qui est la raison de l'erreur de compilation.
_email = SERVICE_EMAIL;
Il est similaire question mais la raison n'est pas mentionné.
Chaîne de déclaration de classe avec des méthodes pertinentes
class String
{
public:
String();
String(const String& src);
String(const char *new_str);
String& operator=(const String& src);
String& operator=(const char *new_str);
};
- SERVICE_EMAIL chaîne est entre guillemets, c'était copiez et collez erreur
- Nous n'avons pas suffisamment d'informations pour identifier correctement le problème. S'il vous plaît au moins fournir plus d'informations à propos de votre
String
type. - J'ai ajouté les citations ainsi d'autres ne le seront pas désorientés.
- J'ai mis à jour la question de la déclaration de la méthode dans la classe String uniquement avec les méthodes
- Sur la ligne obtenez-vous l'erreur? Existe-il d'autres erreurs? Il ne devrait pas être une erreur, selon les informations que vous avez fournies jusqu'à présent.
- Je reçois le message d'erreur pour la ligne _email = SERVICE_EMAIL; Dans le lien à la question similaire, je l'ai mentionné, c'est le même problème mais personne n'a répondu à la raison pour la même
- un point important que j'ai manqué est SERVICE_EMAIL est définie dans un autre espace de noms, et je suis accèdent en tant que NAMESPACE::SERVICE_EMAIL.J'ai mis à jour le code en conséquence, son erreur sur myside que le code est très compliqué de copier et de coller complètement
- Ah. C'est un point crucial de l'information. La solution est affichée ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devriez mettre des guillemets autour de l'adresse e-mail:
Deuxièmement, vous ne devriez pas utiliser
#define
à tous. Utiliser unconst
variable à la place:#define
s sont de type dangereux, n'ont pas de portée et sont généralement mal.Dernier, vous pouvez envisager d'utiliser
std::string
au lieu de votreString
classe.Mise à jour:
Le problème est que le préprocesseur
#define
s ne sont rien de plus que du texte des substitutions. Lorsque le préprocesseur est fait, votre compilateur va voirIl n'y a pas de chaîne de caractères constante dans cet espace de noms.
SERVICE_EMAIL
n'est pas un identificateur de la sorte - c'est juste une indication pour le préprocesseur de remplacer toutes les occurrences deSERVICE_EMAIL
avec"[email protected]"
.La solution est de supprimer l'espace de noms qualifier:
Meilleure solution:
Si vous n'avez pas accès à la
#define
, vous devriez envelopper dans un fichier d'en-tête, si possible:et ensuite utiliser
NOTIFICATION_CONSTANTS::REAL_SERVICE_EMAIL
au lieu de cela, ce qui l'a portée, de la est un, est un bon membre de l'espace de noms, et ainsi de suite.Le problème est, je pense, puisque je ne connais pas le
String
type, c'est que SERVICE_EMAIL doit être une chaîne littérale:mais alors, il doit échouer, même dans la seconde solution. Peut-être que votre extrait de code ne montre pas le vrai problème.
Quel est le type de [email protected]?
Je pense que vous souhaitez utiliser une chaîne de caractères pour stocker une adresse e-mail.
Essayer: