我是托管C++的新手.
我在一个.sln,Project Lib和Project LibTest中有两个托管C++项目.LibTest使用Lib.
Lib编译和链接很好.该项目设置为.dll.
LibTest也编译为.dll,但是当它进入链接时,我在所有Lib ::方法上得到"未解析的标记".这些方法定义在Lib .cpp文件中定义.
如果我将定义移动到Lib.h文件中,一切正常.
我已经修改了LibTest的Reference以依赖Lib项目.
我错过了什么?
编辑:好的,这正是我所拥有的,它仍然无法正常工作.
首先,我使用的是Visual Studio 2008 SP1.
其次,当我在C#中进行类似的练习时,它运行良好.
我创建了一个空的C++ CLR项目.我添加了一个Lib项目.我添加了一个托管类.VSTD生成了Lib.h和Lib.cpp.构造函数是自动生成的.
然后我在我的解决方案中添加了另一个项 我称之为LibTest.我添加了另一个名为LibTest的托管类.生成LibTest.h和LibTest.cpp.我试图在LibTest构造函数中实例化Lib,但在链接期间它只是说:
1> LibTest.obj:错误LNK2020:未解析的令牌(06000002)Lib ::.ctor
这是确切的代码:
Lib Project(编译为.dll项目)
//Lib.h
#pragma once
ref class Lib
{
public:
Lib(void);
};
//Lib.cpp
#include "Lib.h"
Lib::Lib(void)
{
}
Run Code Online (Sandbox Code Playgroud)
LibTest项目(编译为application.exe)
// LibTest.h
#pragma once
ref class LibTest
{
public:
LibTest(void);
};
// LibTest.cpp
#include "LibTest.h"
#include "Lib.h"
LibTest::LibTest(void)
{
Lib^ lib = gcnew Lib;
}
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
托管C++就像C#一样,关于不同程序集中的类型.这意味着您需要将您的Lib类声明为public:
public ref class Lib
Run Code Online (Sandbox Code Playgroud)
而且你不应该包含Lib.h在你的LibTest项目中.当您添加对Lib项目的引用时,编译器将能够解析在那里找到的任何符号.
您当前的代码包含Lib.h,因此链接器Lib在LibTest程序集中搜索类并在那里查找构造函数.