gpt4 book ai didi

managed-c++ - 托管C++无法解析的 token

转载 作者:行者123 更新时间:2023-12-04 13:55:59 28 4
gpt4 key购买 nike

我是托管C++的新手。

我在单个.sln中有两个托管的C++项目,即Project Lib和Project LibTest。 LibTest使用Lib。

库编译和链接很好。该项目设置为.dll。

LibTest也被编译为.dll,但是当它进入链接时,我在所有Lib::method上都得到了“未解析的 token ”。这些方法定义在Lib .cpp文件中定义。

如果将定义移到Lib.h文件中,则一切正常。

我已经修改了LibTest的引用以依赖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:无法解析的 token (06000002)Lib::。ctor

这是确切的代码:

Lib项目(编译为.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;
}

最佳答案

对于不同程序集中的类型,托管C++的工作方式与C#一样。这意味着您需要将Lib类声明为public:

public ref class Lib

并且您不应该在 Lib.h项目中包括 LibTest。当您将引用添加到 Lib项目时,编译器将能够解析在那里找到的任何符号。

您当前的代码包括 Lib.h,因此链接器在 Lib程序集中搜索 LibTest类,并在其中查找构造函数。

关于managed-c++ - 托管C++无法解析的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/936415/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com