C++ 解析外部符号时出错
我试图在VisualStudio 2015 中创建一个简单的C++项目 Peakdetector.hC++ 解析外部符号时出错,c++,C++,我试图在VisualStudio 2015 中创建一个简单的C++项目 Peakdetector.h #ifndef PEAKDETECTOR_H #define PEAKDETECTOR_H //------------------------------------------------------- #ifdef DLL_BUILD_SETUP #ifdef Q_OS_LINUX #define DLLSPEC __attribute__((visibil
#ifndef PEAKDETECTOR_H
#define PEAKDETECTOR_H
//-------------------------------------------------------
#ifdef DLL_BUILD_SETUP
#ifdef Q_OS_LINUX
#define DLLSPEC __attribute__((visibility("default")))
#else
#define DLLSPEC __declspec(dllexport)
#endif
#else
#ifdef Q_OS_LINUX
#define DLLSPEC
#else
#define DLLSPEC __declspec(dllimport)
#endif
#endif
namespace vpg {
#ifndef VPG_BUILD_FROM_SOURCE
class DLLSPEC PeakDetector
#else
class PeakDetector
#endif
private:
int __seek(int d) const;
double __getDuration(int start, int stop);
}
inline int PeakDetector::__seek(int d) const
{
return ((m_intervalslength + (d % m_intervalslength)) % m_intervalslength);
}
#endif
PeakDetector.cpp
#include "stdafx.h"
#include "peakdetector.h"
namespace vpg {
void PeakDetector::__updateInterval(double _duration)
{
//other stuff
}
}
当我试图运行这个应用程序时,我得到一个错误
LNK2019未解析的外部符号“\uuuu declspec(dllimport)private:int\uuu cdecl vpg::PeakDetector::\uuuu seek(int)const”(\uuu imp_o__seek@PeakDetector@vpg@@AEBAHH@Z)在函数“private:void u cdecl vpg::PeakDetector::uu updateInterval(double)”中引用(__updateInterval@PeakDetector@vpg@@AEAAXN@Z)MyCustomProject
我是新手,无法理解为什么会出现此错误。我刚刚从一个示例中复制粘贴了此代码。如果缺少任何代码,请告诉我。另外,我没有任何.lib文件。您必须在Visual Studio中添加
DLL\u BUILD\u设置
定义
为了做到这一点,你必须去
Project Settings -> C/C++ -> Preprocessor -> Preprocessor definitions
并将定义添加到列表中
编译导出符号的库(在本例中为类)时,必须使用规范\uuu declspec(dllexport)
,在使用该库的项目中必须使用规范\uu declspec(dllimport)
我从您提供的源代码中看到,有一个附加的定义
VPG\u BUILD\u from\u source
,它禁用导出,以便使用静态/内联链接,您可以尝试添加该定义。您必须在Visual Studio中添加DLL\u BUILD\u设置
定义
为了做到这一点,你必须去
Project Settings -> C/C++ -> Preprocessor -> Preprocessor definitions
并将定义添加到列表中
编译导出符号的库(在本例中为类)时,必须使用规范\uuu declspec(dllexport)
,在使用该库的项目中必须使用规范\uu declspec(dllimport)
我从您提供的源代码中看到,有一个附加的定义
VPG\u BUILD\u from\u source
,它禁用了导出,以便使用静态/内联链接,您可以尝试添加该定义。C++区分大小写。@NeilButterworth非常感谢您。就像我说的,我对这个很陌生。我应该在这里换什么?是不是类peakDetector{
?@Rohit类名“类peakDetector”此外,像C++ C++这样的名字是保留在C++实现中的。你不应该在你自己的代码中创建这些名字。这意味着他们也错了。不要跟着他们的例子。更多的阅读:C++是区分大小写的。@ NeilButterworth非常感谢。就像我说的,我对这个很陌生。我应该在这里做什么?是不是代码?探测器{??@Rohit类名“类峰值探测器”此外,像C++一样,名称> >查找> /CODE是为C++实现的,不应该在自己的代码中创建这些名称。这意味着它们也错了。不要跟随他们的例子。更多的阅读:我没有发现帖子里有任何错误,但是考虑到我在评论中读到的:是不是有人更新了原来的问题。删除了打字错误?@JuanRamirez如果你查看编辑行,你可以看到帖子的历史记录。原始帖子是camelCase,但更新为PascalCase。谢谢@Thebluefish,我之前的评论是针对一位用户的,他说我遗漏了一个打字错误,而这个错误在当时已经修复:)我在帖子中没有发现任何打字错误,但是考虑到我在评论:可能是有人更新了原始问题并删除了打字错误吗?@JuanRamirez如果你查看编辑行,你可以看到帖子的历史记录。原始帖子是camelCase,但被更新为PascalCase。谢谢@Thebluefish,我之前的评论是针对一位用户的,他说我遗漏了一个打字错误,而这在当时已经修复:)