静态const char上的LINK错误*

时间:2013-09-04 12:51:53

标签: c++ char const

我无法弄清楚我在哪里出错了。在我的标题中:

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。

5 个答案:

答案 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文件中),链接器将抱怨多个定义。如果你无法定义它,你会在问题中得到错误。