【发布时间】:2020-02-07 22:05:36
【问题描述】:
我正在尝试使用 OmniORB 创建一个服务器,并且我想创建几个 shared_ptrs。但是当我这样做时,我得到以下 2 错误
error LNK2019: unresolved external symbol __imp__invalid_parameter referenced in function "public: class std::shared_ptr<struct SharedPtr_i::Vector2> & __cdecl std::array<class std::shared_ptr<struct SharedPtr_i::Vector2>,1000>::operator[](unsigned __int64)" (??A?$array@V?$shared_ptr@UVector2@SharedPtr_i@@@std@@$0DOI@@std@@QEAAAEAV?$shared_ptr@UVector2@SharedPtr_i@@@1@_K@Z)
error LNK2019: unresolved external symbol __imp__CrtDbgReport referenced in function "public: class std::shared_ptr<struct SharedPtr_i::Vector2> & __cdecl std::array<class std::shared_ptr<struct SharedPtr_i::Vector2>,1000>::operator[](unsigned __int64)" (??A?$array@V?$shared_ptr@UVector2@SharedPtr_i@@@std@@$0DOI@@std@@QEAAAEAV?$shared_ptr@UVector2@SharedPtr_i@@@1@_K@Z)
我知道大多数这些“未解析的外部符号”是由于忘记导入 *.lib 文件造成的。但是据我所知,我的代码不需要额外的 .lib 文件。
这是导致我出现问题的代码:
#include "pch.h"
#include <array>
#include "sharedPtr.hh"
class SharedPtr_i : public POA_SharedPtr
{
private:
struct Vector2
{
float x, y;
};
public:
inline SharedPtr_i() {}
virtual ~SharedPtr_i() {}
void CreateSharedPtr();
};
void SharedPtr_i::CreateSharedPtr()
{
std::array<std::shared_ptr<Vector2>, 1000 > sharedPtrs;
for (int i = 0; i < sharedPtrs.size(); i++)
{
sharedPtrs[i] = std::shared_ptr<Vector2>(new Vector2()); // This line caused the error
}
}
在我的测试中,我发现括号 ([ ]) 导致了错误,但是括号如何导致未解决的外部符号错误?
非常感谢任何有关如何解决问题的建议。
【问题讨论】:
-
很难推断代码隐藏在标题中而不是问题中的代码 - 您应该创建一个minimal reproducible example,以及它的编译和链接命令。
-
@TobySpeight 你是什么意思? sharedPtr.hh 只是我需要的服务器和客户端的接口。我可以和你分享,但我还没有把它变成我自己。 hh 文件是通过 IDL 编译器生成的。其他一切都只是服务器处理的东西,并且在 main() 函数中。没有问题。
-
方括号如何导致无法解析的外部符号错误?您是否阅读了符号的名称(
__imp__invalid_parameter)? -
您有 2 个不同的链接器错误。查看此链接以了解第一个错误。您的调试模式项目设置似乎存在不一致之处,即不同的标志等。social.msdn.microsoft.com/Forums/vstudio/en-US/…
-
@Sisir 谢谢!我在 Debug (x64) 上运行并在 C/C++ -> Code Generation中选择了 Multi-threaded DLL 而不是 Multi-threaded Debug DLL >.