managed-c – 托管C未解析的令牌
我是托管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:未解析的令牌( //Lib.h #pragma once ref class Lib { public: Lib(void); }; //Lib.cpp #include "Lib.h" Lib::Lib(void) { } 002)Lib ::.ctor 这是确切的代码: Lib Project(编译为.dll项目) //Lib.h #pragma once ref class Lib { public: Lib(void); }; //Lib.cpp #include "Lib.h" Lib::Lib(void) { } 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; } 解决方法
Managed C就像C#一样,关于不同程序集中的类型.这意味着您需要将Lib类声明为public:
public ref class Lib 并且您不应该在LibTest项目中包含Lib.h.当您添加对Lib项目的引用时,编译器将能够解析在那里找到的任何符号. 您当前的代码包含Lib.h,因此链接器在LibTest程序集中搜索Lib类并在那里查找构造函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |