0

I can't figure out where I've gone wrong here. In my header:

static const char* ACH_DEBIT;

and then, in the constructor:

ACH_DEBIT = "ach_debit";

I get this error on compilation:

 error LNK2001: unresolved external symbol "public: static char const * const MyClass::ACH_DEBIT" (?ACH_DEBIT@MyClass@@2PEBDEB)

Please, someone reteach me CS101.

4

5 回答 5

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";
于 2013-09-04T12:55:10.603 回答
2

您的 cpp 文件必须包含ACH_DEBIT的定义,如下所示:

const char* ClassName::ACH_DEBIT;
于 2013-09-04T12:52:57.377 回答
1

您需要提供静态成员的定义。在全局范围的源文件中,执行

const char* ClassName::ACH_DEBIT = "ach_debit";
于 2013-09-04T12:54:50.560 回答
1

静态类成员与静态变量或函数不同。对于类成员,这意味着只存在一个静态成员,并且它独立于类的任何对象而存在。静态类成员与普通导出的全局变量或函数基本相同。所以它也必须存在并被初始化,即使那个类的构造函数没有被执行过。

如果您希望它成为“普通”静态变量,则不要将其放入类定义中,并且根本不要将其放入 .h 文件中(因为它将在包含它的每个 .cpp 中重复)。

如果你想拥有静态类成员,那么除了在定义中声明它之外,你还需要在某个地方定义静态成员本身,恰好在一个.cpp 文件中,在任何方法之外都有这样的行:

const char* ClassName::ACH_DEBIT = "ach_debit";

如果您在许多 .cpp 文件中定义它(例如,因为您将其放入包含文件并将其包含到许多 .cpp 文件中),链接器将抱怨多个定义。如果你在任何地方都没有定义它,你会得到问题中的错误。

于 2013-09-04T12:57:05.450 回答
1
static const char* ACH_DEBIT; 

是一个静态成员声明,​​虽然你可以在构造函数中分配给这个变量,但这可能不是你想要的。
无论如何,您需要在某处定义(实现)静态成员,例如在 cpp 文件中:

const char* MyClass::ACH_DEBIT = "ach_debit";
于 2013-09-04T12:55:46.413 回答