C++ MFC&x2B+;与非MFC控制台应用程序链接的静态库

C++ MFC&x2B+;与非MFC控制台应用程序链接的静态库,c++,visual-studio-2012,mfc,static-libraries,C++,Visual Studio 2012,Mfc,Static Libraries,我正在尝试编译一个控制台程序,该程序使用实现CString的静态库。控制台应用程序是使用VS向导创建的,具有: 带有预编译头的Win32控制台应用程序,SDL验证,但没有ATL或MFC。 静态库是MFC静态库(向导构造) 我的错误在哪里 这就是我一直尝试的: 我已经使用MFC控件创建了一个新的控制台应用程序——这个程序可以通过静态库编译 然后,我在必要时控制和修改了每个链接选项,比较了两个控制台项目。 但是第一个控制台应用程序没有编译。 我累坏了! 我正在Windows 10上使用Visual

我正在尝试编译一个控制台程序,该程序使用实现CString的静态库。控制台应用程序是使用VS向导创建的,具有: 带有预编译头的Win32控制台应用程序,SDL验证,但没有ATL或MFC。 静态库是MFC静态库(向导构造)

我的错误在哪里

这就是我一直尝试的:

我已经使用MFC控件创建了一个新的控制台应用程序——这个程序可以通过静态库编译

然后,我在必要时控制和修改了每个链接选项,比较了两个控制台项目。 但是第一个控制台应用程序没有编译。 我累坏了! 我正在Windows 10上使用Visual Studio 2012

代码如下: 文件TestLib.h

#pragma once
#include <atlstr.h>

class TestLib
{
public:
    TestLib(){};
    TestLib(const CString &tst);
    virtual ~TestLib(void);
private:
    CString _tst;
};
Fichier控制台测试2.cpp

// ConsoleTest2.cpp : définit le point d'entrée pour l'application console.
#include "stdafx.h"
#include "TestLib.h"

int _tmain(int argc, _TCHAR* argv[])
{
    TestLib *tst = new TestLib(); // This compile fine !
    //TestLib *tst = new TestLib(_T("Test")); // This generates LNK2019 link error
    return 0;
}

多亏了乔森·阿恩特,这就是解决方案

只需将TestLib声明更改为

TestLib::TestLib(LPCTSTR str)
    : _tst(str)
{
}

您在stdafx.h中包含了哪些文件?使用MFC时,仅使用ATL标头是不够的。你必须包括afx.h!否则,请随意使用ATL(CString也是ATL的一部分。stdafx.h文件包括targetver.h、stdio.h和tchar.h…我只是使用项目向导生成器获取标准文件,然后添加Lib类。
TestLib::TestLib(LPCTSTR str)
    : _tst(str)
{
}