我无法弄清楚我在哪里出错了。在我的标题中:
static const char* ACH_DEBIT;
然后,在构造函数中:
ACH_DEBIT = "ach_debit";
我在编译时收到此错误:
error LNK2001: unresolved external symbol "public: static char const * const MyClass::ACH_DEBIT" (?ACH_DEBIT@MyClass@@2PEBDEB)
请有人重新找我CS101。
答案 0 :(得分:3)
此:
static char const* ACH_DEBIT;
是声明。您还需要在实现文件中单独定义静态常量:
char const* MyClass::ACH_DEBIT = "ach_debit";
...你可能不想在构造函数中重新分配它。你可能希望通过制作ACH_DEBUG
const
<而不仅仅是其内容来强制执行。所以将声明更改为
static char const* const ACH_DEBIT;
和
的定义char const* const MyClass::ACH_DEBIT = "ach_debit";
答案 1 :(得分:2)
您的cpp文件必须包含 ACH_DEBIT 的定义,如下所示:
const char* ClassName::ACH_DEBIT;
答案 2 :(得分:1)
您需要提供静态成员的定义。在全局范围的源文件中,执行
const char* ClassName::ACH_DEBIT = "ach_debit";
答案 3 :(得分:1)
static const char* ACH_DEBIT;
是一个静态成员声明,虽然您可以在构造函数中指定此变量,但这可能不是您想要的。
无论如何,您需要在某处定义(实现)静态成员,例如在cpp文件中:
const char* MyClass::ACH_DEBIT = "ach_debit";
答案 4 :(得分:1)
静态类成员与静态变量或函数不同。对于类成员,它意味着,只有一个静态成员存在,并且它独立于该类的任何对象而存在。静态类成员与正常导出的全局变量或函数基本相同。所以即使没有执行该类的构造函数,它也必须存在并被初始化。
如果你想让它成为一个“正常”的静态变量,那么就不要把它放在类定义中,也不要把它放到.h文件中(因为它会在每个.cpp中复制,包括它)。
如果你想拥有静态类成员,那么除了在defintion中声明它之外,你需要在某个地方定义静态成员本身,在一个 .cpp文件中,用这样的行来定义在任何方法之外:
const char* ClassName::ACH_DEBIT = "ach_debit";
如果您在许多.cpp文件中定义它(例如,因为您将其放入包含文件并将其包含到许多.cpp文件中),链接器将抱怨多个定义。如果你无法定义它,你会在问题中得到错误。