Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LNK2019/LNK2001错误:为什么库会提供带有未实现函数的.cpp文件?(它们是如何实施的?)_C++_Visual C++_Wxwidgets_Lnk2019_Mathgl - Fatal编程技术网

C++ LNK2019/LNK2001错误:为什么库会提供带有未实现函数的.cpp文件?(它们是如何实施的?)

C++ LNK2019/LNK2001错误:为什么库会提供带有未实现函数的.cpp文件?(它们是如何实施的?),c++,visual-c++,wxwidgets,lnk2019,mathgl,C++,Visual C++,Wxwidgets,Lnk2019,Mathgl,我想通过阅读某某的资料,我理解了LNK2019错误的要点 我有一个为什么的问题和一个如何的问题(这两个问题已经在标题中提出了) 为什么库会提供一个包含未实现函数的.cpp文件?我猜答案是:“这样最终用户就可以自己实现这些函数,或者‘链接’其他一些功能。”(如果我错了,请纠正我,但我将继续这个假设。) 例如,在下面的屏幕截图中(单击查看更大的版本),我显示了我遇到的LNK2019错误,以及有问题的文件,wx.cpp 类mglCanvasWX中的任何方法都没有实现(是的,我向下滚动了:-)。下面是

我想通过阅读某某的资料,我理解了LNK2019错误的要点

我有一个为什么的问题和一个如何的问题(这两个问题已经在标题中提出了)

为什么库会提供一个包含未实现函数的.cpp文件?我猜答案是:“这样最终用户就可以自己实现这些函数,或者‘链接’其他一些功能。”(如果我错了,请纠正我,但我将继续这个假设。)

例如,在下面的屏幕截图中(单击查看更大的版本),我显示了我遇到的LNK2019错误,以及有问题的文件,
wx.cpp

mglCanvasWX
中的任何方法都没有实现(是的,我向下滚动了:-)。下面是
wx.cpp
,下面是,以防有人想查看代码,但我不会要求任何人走这么远

这些功能是如何实现的?

我猜是.dll文件包含了这些实现。因此,我需要找到实现
Window
ToggleAlpha
ToggleLight
等的.dll文件。(我猜我可以忽略所有其他类型的文件,.obj、.lib、.exp等),但我如何知道在哪里可以找到这些.dll文件?-或者甚至知道.dll文件确实实现了这些功能,因为它们是二进制(非人类可读)文件

很抱歉同时问两个问题,但我认为这些是解决链接器错误所需了解的基本内容。(我觉得我遗漏了一个概念,即使我需要问两个问题。)提前感谢您提供的任何指导,并且很抱歉在现有的LNK2019问题堆中添加以下内容


补遗 这可能与:

#      define MGL_EXPORT __declspec(dllexport)
但我不确定这是否表明这个未实现的类是作为DLL导出的(这样的DLL有什么用?),还是表明这个类必须由DLL文件实现(这更有意义)

另外,我之所以提出我的问题“为什么库会…”,是因为这个项目中的另一个依赖项,
mgl fltk
,提供了类似的类及其函数,但确实实现了类似的类及其函数(并且构建得很好)!请看屏幕截图。然而,它的类定义不同于
mglwx
,它省略了
mgl_导出
,这向我暗示了FLTK不打算在外部实现

class mglCanvasFL : public mglCanvasWnd

理论 好的,经过进一步思考,我提出了一个理论,但只有一位经验丰富的软件开发人员才能告诉我它是否合理

MathGL的开发人员可能根本没有着手实现这些定义吗?也就是说,MathGL是否可能还不支持wxWidgets

请参见,在原始MathGL源中,有以下文件:

QT、FLTK和GLUT都实现了它们的
mglcavasqt
mglcavasfl
mglcavasglut
,例如

//qt.cpp
void mglCanvasQT::Animation(){QMGL->Animation(true);}
void mglCanvasQT::ToggleAlpha(){QMGL->setAlpha(!QMGL->getAlpha());}
//fltk.cpp
void mglCanvasFL::Animation(){Fl::lock();mgl_sshow_cb(0,mgl);Fl::unlock();}
void mglCanvasFL::ToggleAlpha(){Fl::lock();mgl->toggle_alpha();Fl::unlock();}
//glut.cpp
mglCanvasGLUT类:公共mglCanvasGL
{
公众:
// ...
void ToggleAlpha(){u mgl_key_up('r',0,0);}
void Animation()
// ...
}
只有
mglcavaswx
没有实现,只有
mglcavaswx
在其类名前面有
MGL\u EXPORT


那么可能的解释是什么呢?WX支持还不存在?或者,WX支持存在,但作为外部库(DLL)更容易提供?如果一位经验丰富的软件开发人员能够参与进来,我将不胜感激。

天哪,我的理论证明是正确的

经过几个小时的实验(并写下了这个问题),我开始意识到也许wxWidgets并不是为了与MathGL一起使用而实现的。(见上面的“理论”编辑)我在这个新环境下做了一些谷歌搜索,瞧-来自MathGL的维护者本人(我只认识他的名字,因为它是上面7-Zip屏幕截图中的用户名/组名)-

摩顿麦克弗利11年1月22日

你好,我想知道wx样本在做什么。好像有一个 存根已准备好,但尚未实现任何功能。我想用 此库位于wxWidgets项目中。有什么提示吗

2011年1月25日亚历克赛·巴拉金

基本上是的。多年前我从wxWidgets切换到Qt。。。所以 我已经忘记了很多wxWidget的洞察力,决定停止制作 基于wxWidget的工作窗口。有几个问题:MathGL 已经有2个(基于FLTK和Qt),我没有那么多时间 写|测试wxWidget one:(

因此,现在您可以执行以下操作:

1) 使用MathGL生成的RGB位图显示wxWidget中的图像 控制这里有一个样品

2) 使用mgl/mgl_wx.h中定义的wxMathGL小部件。我很希望它是什么 应该按原样工作,但我没有测试:(

3) 帮助我编写| test wxMathGL小部件和类mglGraphWX 将显示带有基于wxWidget.I(和其他I)控件的窗口 我会非常感激的


专家们还讨论了一些替代方案,尽管我不知道它们是否有效。

@remyabel-啊,是的,类似的东西!我想将MathGL渲染输出到窗口,而不是文件,MathGL文档说:有一组“win”
// qt.cpp

    void mglCanvasQT::Animation()   {   QMGL->animation(true);  }
    void mglCanvasQT::ToggleAlpha() {   QMGL->setAlpha(!QMGL->getAlpha());  }

// fltk.cpp

    void mglCanvasFL::Animation()   {   Fl::lock(); mgl_sshow_cb(0,mgl);    Fl::unlock();   }
    void mglCanvasFL::ToggleAlpha() {   Fl::lock(); mgl->toggle_alpha();    Fl::unlock();   }

// glut.cpp

    class mglCanvasGLUT : public mglCanvasGL
    {
    public:
        // ...
        void ToggleAlpha()  {   _mgl_key_up('r',0,0);   }
        void Animation()    {   _mgl_key_up('m',0,0);   }   ///< Run slideshow (animation) of frames
        // ...
    }