字符串常量前的非限定id
Unqualified-id before string constant
在编译以下代码时,我得到错误"expected unqualified-id before string constant"
In file "Notification_Constants.h"
namespace NOTIFICATION_CONSTANTS
{
#define SERVICE_EMAIL "service@company.com"
}
sendmail .cpp文件
#include "Notification_Constants.h"
void UserPreferences::get_senders_email(String &_email)
{
_email = NOTIFICATION_CONSTANTS::SERVICE_EMAIL;
}
如果我像下面这样赋值,它可以正常工作,那么编译错误的原因是什么?
_email = SERVICE_EMAIL;
有一个类似的问题,但没有提到原因。
带相关方法的字符串类声明
class String
{
public:
String();
String(const String& src);
String(const char *new_str);
String& operator=(const String& src);
String& operator=(const char *new_str);
};
首先,您应该在电子邮件地址周围加上引号:
#define SERVICE_EMAIL "service@company.com"
第二,根本不应该使用#define
。使用const
变量代替:
const String SERVICE_EMAIL = "service@company.com";
#define
s是类型不安全的,没有作用域,通常是邪恶的。
最后,您可能需要考虑使用std::string
而不是String
类。
:
问题在于预处理器#define
s只不过是文本替换。预处理器完成后,编译器将看到
_email = NOTIFICATION_CONSTANTS::"service@company.com";
该命名空间中没有字符串常量。SERVICE_EMAIL
不是任何类型的标识符——它只是指示预处理器用"service@company.com"
替换出现的SERVICE_EMAIL
。
_email = SERVICE_EMAIL;
更好的解决方案:
如果你不能访问#define
,你应该把它包装在一个头文件中,如果可能的话:
#include "Notification_Constants.h"
namespace NOTIFICATION_CONSTANTS {
const String REAL_SERVICE_EMAIL = SERVICE_EMAIL;
}
,然后使用NOTIFICATION_CONSTANTS::REAL_SERVICE_EMAIL
,它具有作用域,是类型,是名称空间的适当成员,等等。
问题是,我想因为我不知道String
类型,是SERVICE_EMAIL应该是字符串文字:
#define SERVICE_EMAIL "service@company.com"
但是,即使在后一种解决方案中,它也应该失败。也许你的代码片段没有显示出真正的问题。
#define SERVICE_EMAIL "service@company.com"
service@company.com是什么类型的?我认为您希望使用字符串来存储电子邮件地址。
试题:
#define SERVICE_EMAIL "service@company.com"
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 3 与错误最接近的总和:字符串常量之前的预期非限定 id
- 函数中的默认"常量<int>向量 &id"参数
- 数字常量之前的预期非限定 id.- 阿杜伊诺
- 错误:字符串常量 extern "a" { 之前应为非限定 ID
- 字符串常量(包括ZenLib/Ztring.h)之前应为不合格id
- (C++)错误:在数字常量之前应为非限定id--从文件读取时
- 作为宏参数的安装类型返回错误:字符串常量之前的预期非限定 id
- 在数字常量 Arduino 之前应为非限定 id
- 编译时生成的常量类型 ID
- 如何创建一个带有id、字符串和命名常量的数组
- 编译时常量 ID
- 按常量id排序自定义类型的向量
- 在STK代码中,数值常量前预期的非限定id
- 数字常量之前应为非限定id
- 字符串常量前的非限定id