En la compilación de código siguiente tengo un error «espera que no cualificados-id antes de la constante de cadena»

In file "Notification_Constants.h"

namespace NOTIFICATION_CONSTANTS
{
    #define SERVICE_EMAIL "[email protected]"
}

Archivo SendEmail.cpp

#include "Notification_Constants.h"

void UserPreferences::get_senders_email(String &_email)
{
    _email = NOTIFICATION_CONSTANTS::SERVICE_EMAIL;
}

Si puedo asignar el siguiente funciona correctamente, ¿cuál es la razón para el error de compilación.

_email = SERVICE_EMAIL;

Es similar pregunta pero la razón no es mencionado.

Cadena de la declaración de la clase con los métodos relevantes

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 cadena entre comillas dobles, fue copiar y pegar error
  • No disponemos de suficiente información para identificar correctamente el problema. Por favor, al menos, dar más información acerca de su String tipo.
  • He añadido las comillas para que otros no se confunde.
  • He actualizado la pregunta con la declaración de método en la clase de Cadena única con los métodos relevantes
  • En la línea obtengo el error? Hay otros errores? No debería haber un error de acuerdo a la información que ha proporcionado hasta ahora.
  • Obtengo el error para la línea _email = SERVICE_EMAIL; En el vínculo a la pregunta similar que he mencionado es el mismo problema, pero nadie respondió el motivo de la misma
  • un punto importante que me perdí es SERVICE_EMAIL se define en otro espacio de nombres, y yo soy el acceso como espacio de NOMBRES::SERVICE_EMAIL.He actualizado el código en consecuencia, su error en myside como el código es muy complicado de copiar y pegar completamente
  • Ah. Que la información crucial. La solución se publica a continuación.

InformationsquelleAutor Poorna | 2011-05-05

4 Comentarios

  1. 8

    Primer lugar, usted debe poner comillas alrededor de la dirección de correo electrónico:

    #define SERVICE_EMAIL "[email protected]"

    Segundo, usted no debe usar #define a todos. El uso de un const variable lugar:

    const String SERVICE_EMAIL = "[email protected]";

    #defines son de tipo inseguro, no tienen el alcance y son generalmente mal.

    Último, puede que desee considerar el uso de std::string en lugar de su String clase.

    Actualización:

    El problema es que el preprocesador #defines no son nada más que el texto sustituciones. Cuando el preprocesador se hace, el compilador ver

    _email = NOTIFICATION_CONSTANTS::"[email protected]";

    No hay ninguna constante de cadena en ese espacio de nombres. SERVICE_EMAIL no es un identificador de cualquier tipo – es sólo una indicación de que el preprocesador para sustituir cualquier ocurrencia de SERVICE_EMAIL con "[email protected]".

    La solución es quitar el calificador de espacio de nombres:

    _email = SERVICE_EMAIL;

    Mejor solución:

    Si usted no tiene acceso a la #define, se debe envolver en un archivo de cabecera, si es posible:

    #include "Notification_Constants.h"
    
    namespace NOTIFICATION_CONSTANTS {
        const String REAL_SERVICE_EMAIL = SERVICE_EMAIL;
    }

    y, a continuación, utilizar NOTIFICATION_CONSTANTS::REAL_SERVICE_EMAIL lugar, que ha ámbito, es un tipo, es un miembro apropiado del espacio de nombres, y así sucesivamente.

    • lo siento SERVICE_EMAIL cadena entre comillas dobles, fue copiar y pegar error. El problema es que se define en otro dominio que no puedo modificar, ¿cómo puedo construir un objeto de cadena de fuera de ella.
  2. 1

    El problema es que creo que ya no sé la String tipo, es que SERVICE_EMAIL debe ser una cadena literal:

    #define SERVICE_EMAIL "[email protected]"

    pero luego, se debe fallar incluso en la última solución. Tal vez el fragmento de código no muestra el verdadero problema.

Dejar respuesta

Please enter your comment!
Please enter your name here