C++ & VS2015: 未解析的外部和命名空间问题(可能是由 openCV 引起的)[重复]

C++ & VS2015: Problems with unresolved externals and namespaces (maybe caused by openCV) [duplicate]

提问人:Sceen 提问时间:9/6/2016 最后编辑:Sceen 更新时间:9/6/2016 访问量:478

问:

各位社区成员,大家好,

我真的是 stackoverflow 的新手,尽管当我真的陷入困境时,我经常会找到伟大而鼓舞人心的答案。这个我找不到任何东西,所以我发布了它。

简介:我在 2010 年自学了 c++,然后改学了 VB、C# 和 Java。我完全错过了整个管理系统,当事情不像以前那样工作时,我真的很困惑。

问题:我的应用程序正在使用 openCV,并且我已经设法拥有工作构建。目前,我尝试在窗口窗体中显示图片,同时使用openCV对其进行操作。picturbox

包含结构(常规):

main.cpp 包括 main.h

main.h 包括 openCV的 字符串 msclr/marshal_cppstd.h 表单 1、表单 2、表单 3

form3.h 中出现的问题。form3.h的基本结构:

#pragma once

cv::Mat srcImg;
HBITMAP get_srcImg()
{
    HBITMAP b = CreateBitmap(srcImg.cols, srcImg.rows, 1, 32, srcImg.data);
    return b;
}

namespace ownProject{//this is all automatically generated by the designer
class form {...}

我得到:

严重性代码说明 项目文件行抑制状态 错误LNK2019未解析的外部符号“extern”C“结构HBITMAP__ * cdecl CreateBitmap(int,int,unsigned int,unsigned int,void const *)“ (?CreateBitmap@@$$J 0YAPEAUHBITMAP@@HHIIPEBX@Z) 在函数“struct HBITMAP__ * cdecl get_srcImg(void)”中引用 (?get_srcImg@@$$FYAPEAUHBITMAP@@XZ) Path_recognition

我不知道如何解决它。如果我删除该功能,一切正常。问题是我需要在 和 openCV 函数之间转换图片。我之前有未解决的外部问题,并通过调整包含层次结构并删除除 main.cpp 之外的所有 cpp 文件来修复它。createBitmappictureBox

我希望你能帮助我。谢谢。

C++ opencv visual-studio-2015 未解析外部

评论

4赞 IInspectable 9/6/2016
Bitmap^ b;肯定不是 C++。这与您的问题完全无关。您的问题实际上只是什么是未定义的引用/未解析的外部符号错误以及如何修复它的重复?
0赞 Sceen 9/6/2016
您好,感谢您的快速回答!我删除了“Bitmap^ b”部分。但那是什么呢?我的意思是我创建了一个 VC++ 项目,如果没有“^”托管符号,我就不能使用 Bitmap。
3赞 IInspectable 9/6/2016
如果您不知道您正在使用的编程语言,您希望我们如何为您提供帮助?它可以是任何东西,C++/CLI,C++/CX,其他东西。不知道。你也没有,这有点可悲。
0赞 Sceen 9/6/2016
关于您的链接: 我浏览了要点,但我无法控制自己。我使用 createBitmap-function,它被 intellisense 识别。无论如何,它会抛出一个错误。我不必声明它,是吗?也许我只是太傻了,你能再给我一个提示吗?
0赞 user1610015 9/6/2016
@IInspectable 呃,不,它不可能是“任何东西”......System.Drawing.Bitmap 是一个 .NET 类,因此它是 C++/CLI。他确实知道他在用什么语言,他说,是C++。(C++/CLI 本质上是一回事。

答:

0赞 Asesh 9/6/2016 #1

您应该链接到 Gdi32.lib

#pragma comment(lib, "Gdi32.lib")

这应该可以解决您的问题

评论

0赞 Sceen 9/6/2016
谢谢你,这似乎解决了我的问题。如果我仍然需要包含 GDI,为什么会自动识别该函数?我预计会得到一个不同的错误......我的意思是“我完全知道你想告诉我什么,但无论如何我都会在没有任何建议的情况下抛出一个错误”
0赞 IInspectable 9/6/2016
@Sceen:你缺乏勤奋。有两方(真的是 3 方)参与其中。Intellisense、编译器和链接器。Intellisense 和编译器都对源代码进行操作,并且非常了解声明后的符号。链接器使用目标代码,它要求定义符号。你需要去购物 权威的 C++ 书籍指南和列表
0赞 IInspectable 9/6/2016
@Sceen:至于“我会在没有任何建议的情况下抛出错误”,请考虑查看LNK2019文档。我在那里看到了很多建议。
0赞 Sceen 9/6/2016
嗯,好的,谢谢你的链接。也许我真的忘记了很多。@IInspectable:是的,但我的轨道非常糟糕。以前我通过重建我的包含层次结构(同样的错误)来解决它。我想如果智能感知知道这个功能,它已经包含在内了。所以,是的,这是正确的错误,但仍然令人困惑。现在我更了解它;)