MFC C++ 使用静态成员和编译问题

Posted

技术标签:

【中文标题】MFC C++ 使用静态成员和编译问题【英文标题】:MFC C++ using static member and compiling issue 【发布时间】:2012-11-08 17:11:26 【问题描述】:

我有一个类 Rules(),它有一个名为 m_String 的静态公共成员。 我使用适当的 CString 在类中定义该成员。 当我想从全局函数中使用该成员时,我使用“Rules::m_String” 编译时出现以下错误:

Rules.obj:错误 LNK2001:未解析的外部符号“公共:静态类 ATL::CStringT > > Rules::m_String”(?m_String@Rules@@2V?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT @D@ATL@@@@@ATL@@A)

也许这意味着设置 m_String 的规则中的函数也应该是静态的?

【问题讨论】:

这意味着您的代码可能是错误的。你想让我们猜猜你的代码是什么样的吗? 你确定你没有混淆声明和定义? 不!访问Rules::m_String 的函数不需要是静态的。错误表示符号未定义且无法链接! 你好,我不喜欢这个 -1 不显示代码,因为它是周末,我们在以色列不工作,我没有看到你请求代码.. 没关系,祝你度过愉快的一周 【参考方案1】:

很可能您没有在您的Rules.cpp 编译单元中定义(未声明)和初始化Rules::m_String 的实例。

您的Rules.cpp 在任何函数定义之外是否有类似以下的行?

CString Rules::m_String = CString("Whatever initial value required");

如果没有显示更多代码,其他任何事情都很难说。

【讨论】:

以上是关于MFC C++ 使用静态成员和编译问题的主要内容,如果未能解决你的问题,请参考以下文章

mfc 类静态成员

C++面向对象:静态成员和静态成员函数

c++中静态成员变量和静态成员函数(笔试经历)

Visual 2015 C++ 编译器:使用对象调用静态成员不会导致编译器错误 [重复]

MFC中静态成员函数调用其他类的非静态变量

错误:非静态成员函数 C++ 的无效使用