如何解决连接异常(求通用的解决思路)

怎么解决连接错误(求通用的解决思路)?
1>CView.obj : error LNK2001: 无法解析的外部符号 "public: static class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > * CFrameWindowWnd::WindowClassName" (?WindowClassName@CFrameWindowWnd@@2PAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@A)

这是本次编程中遇到的一个连接错误,“无法解析的外部符号”本身很好理解,不过难以理解的是后面说的是什么。仔细看了一下,括号之前的算是看懂了:

public: static  class 
std::basic_string <wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > 
// wchar_t作为模板参数实例化的basic_string类,即STL中的wstring类
* CFrameWindowWnd::WindowClassName
// CFrameWindowWnd类里的WindowClassName(实际上这是一个类里的静态变量)

看懂这堆东西之后我就去找相关的代码,首先是定义:

class CFrameWindowWnd : public CWindowWnd, public INotifyUI
{
public:
static wstring *WindowClassName; // 静态的类名,所有窗口用同一个类名
};

然后是对这个变量的调用:

CFrameWindowWnd::WindowClassName = new wstring(szWindowClass);

有些声明就略了。当时候看到上面的调用好像懂了,将“::”改为了“.”,但是编译都出错了,说“.”之前要有;,那很明显不对,再看一下MSDN的static的说明:http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=ZH-CN&k=k(STATIC);k(DevLang-%22C%2B%2B%22)&rd=true
下面例子Example(例子)中有三个框,看了第二个框的代码之后发现我好像没写错
如何解决连接异常(求通用的解决思路)
但是就是出现连接错误。

现在问题来了,错误提示括号里的这堆东西 (?WindowClassName@CFrameWindowWnd@@2PAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@A)到底在说什么?能给我带来有用的信息吗?
------解决方案--------------------
CFrameWindowWnd::WindowClassName
就是说你这个符号没有实现.  
静态变量要在类体外定义(实现),  你在类中的部分,只是对它进行了声明而以. 
即在.cpp文件中要所有函数体外写下面一句:

wstring CFrameWindowWnd::WindowClassName;

一般连接错误就三种解决方案:
1.  它提示的那个函数你真的没有实现.   或者因为写错了, 导致编译器认为你没有实现.
2. 如果符号是在某个cpp文件中定义的, 则可能是 没有把符号所在的cpp添加进工程.
3. 如果符号在库中, 则可能是没有把lib文件引用到工程中.

一般解决错误的顺序是从上到下,  因为第一个错误可能导致编译器误报接下来的N个错.


对你的错误, 就是
------解决方案--------------------
括号内应该是函数的真正的名字,也就是经过编译器Name Mangling后的名字。