public:静态常量字符串声明/初始化问题
public: static constant string declaraion/initialization issue
我希望创建静态常量字符串变量协议列表,但我在这方面遇到了问题。
- 构建系统:Visual Studios 2017
- 开发/目标体系结构:x64
- 开发/目标操作系统:Windows 10 Professional(64位(
- 应用程序开发平台:Win32 API(Windows SDK 10.0.17134.0(
错误:
错误LNK2001未解析的外部符号"public:static classstd::basic_string<char,structstd::char_traits<char>,类std::分配器<char>>const协议::serviceVersionRequestStr"(?serviceVersionRequestStr@Protocol@@2V$basic_string@DU$char_traits@D@std@@V$allocator@D@2@@std@@B(
Protocol.h
class Protocol
{
public:
static const std::string libraryVersionRequestStr;
static const std::string serviceVersionRequestStr;
static const std::string libraryVersionResponseStr;
static const std::string serviceVersionResponseStr;
static const std::string restartStr;
static const std::string identifyUserStr;
static const std::string registerUserStr;
static const std::string deleteUserStr;
static const std::string identifyUserSuccessStr;
static const std::string identifyUserWithdrawStr;
static const std::string identifyUserwithdrawSuccessStr;
static const std::string identifyUserwithdrawFailureStr;
static const std::string positiveAcknowledgementStr;
static const std::string negativeAcknowledgementStr;
//Some Public and Private methods
}
Protocol.cpp
std::string libraryVersionRequestStr = std::string("GetLibraryVersion");
std::string serviceVersionRequestStr = std::string("GetServiceVersion");
std::string libraryVersionResponseStr = std::string("LibraryVersion:");
std::string serviceVersionResponseStr = std::string("ServiceVersion:");
std::string restartStr = std::string("RestartService");
std::string identifyUserStr = std::string("IndentifyUser");
std::string registerUserStr = std::string("RegisterUser");
std::string deleteUserStr = std::string("DeleteUser");
std::string identifyUserSuccessStr = std::string("IdentifyUserSuccess:");
std::string identifyUserWithdrawStr = std::string("IdentifyUserWithdraw");
std::string identifyUserwithdrawSuccessStr = std::string("IdentifyUserWithdrawSuccess:");
std::string identifyUserwithdrawFailureStr = std::string("IdentifyUserWithdrawFailure:");
std::string positiveAcknowledgementStr = std::string("Ack_");
std::string negativeAcknowledgementStr = std::string("Nack_");
如果我试图在定义期间初始化静态常量字符串,我会得到一个错误
例如:static const std::string negativeAcknowledgementStr = std::string("Nack_");
错误(活动(E1591类型为"const-std::string"的成员不能具有类内初始化程序
对于这个项目,由于我坚持C++17标准,我通过添加inline
关键字并使用定义初始化我的变量来解决错误。
static inline const std::string negativeAcknowledgementStr = std::string("Nack_");
问题:
- 这是C++17标准中引入的东西,还是Visual C++编译器强制要求的东西?我以前使用C++14在gcc中编写过代码,在那里我在头文件中用公共访问修饰符在类中定义了静态常量字符串变量,并在单独的源文件中初始化了它们
- 除内联关键字外,我还有哪些其他方法可以实现相同的效果
您在定义中遗漏了类名和const关键字
const std::string Protocol::libraryVersionRequestStr = std::string("GetLibraryVersion");
等等。等
相关文章:
- C++转换参数初始化问题
- 运行时C++数组初始化问题
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- shared_ptr类的向量的向量初始化问题
- public:静态常量字符串声明/初始化问题
- 为什么C++中的大括号初始化可以解决STL容器的初始化问题
- 程序在没有输入的情况下退出,它有基本的,驱动的类属性初始化问题
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 没有匹配的构造函数初始化问题,将指针传递给对象
- STD ::复杂的初始化问题
- 对象的数组-STD ::数组 - 构造函数初始化问题
- C++14 值初始化问题
- 如何使用visualstudio2013解决数组初始化问题
- 数组初始化问题:意外行为
- const void*对象初始化问题C++
- 阵列初始化问题
- 复制双链表的构造函数,头部初始化问题
- 字符初始化问题
- 枚举初始化问题
- c++ DLL的制作:静态变量初始化问题