0

在我的 c++ 程序中,我试图创建一个包含我的 a* 算法功能的 dll。我在尝试将地图传递给它时遇到了一个问题,我首先尝试使用二维数组,但这限制了我的地图大小,所以我现在尝试在矢量中使用矢量并且我一直遇到一些奇怪的障碍。

在我的 dll .h 文件中:

namespace IInterface
{
class IInterface
{
public:
    // Sets the map
    static __declspec(dllexport) void setMap(int h, int w,vector<vector<byte>> &myarray);
private:
    static vector<vector<byte>> mymap;
}

最后在 .cpp 我有:

#include "IInterface.h"
#include <Windows.h>
#include <stdexcept>
#include <vector>
using namespace std;

namespace IInterface
{
void IInterface::setMap(int h, int w,vector<vector<byte>> &myarray)
{
    mymap = myarray;
}
}

即使代码对我来说看起来不错,我在编译时也遇到了一些错误。

error C2061: syntax error : identifier 'vector' c:\users\steven\documents\github\schooladvgdproject\game code\deathastardll\iinterface.h    7   1   DMAstarDLL
error C2143: syntax error : missing ';' before '<'  c:\users\steven\documents\github\schooladvgdproject\game code\deathastardll\iinterface.h    21  1   DMAstarDLL
error C2238: unexpected token(s) preceding ';'  c:\users\steven\documents\github\schooladvgdproject\game code\deathastardll\iinterface.h    21  1   DMAstarDLL
error C2511: 'void IInterface::IInterface::setMap(int,int,std::vector<_Ty> &)' : overloaded member function not found in 'IInterface::IInterface'   c:\users\steven\documents\github\schooladvgdproject\game code\deathastardll\iinterface.cpp  13  1   DMAstarDLL
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\steven\documents\github\schooladvgdproject\game code\deathastardll\iinterface.h    21  1   DMAstarDLL

我查看了一些样本,但实际上没有任何东西与这种情况相匹配。我有一个偷偷摸摸的怀疑我忘记了一些重要的东西,但我看不到它。让这个工作的想法?

4

1 回答 1

0

您的 dlls.h 不包含向量类型 - 您应该告诉编译器向量定义并包含。

提示:不要使用 using namespace std; 仅在 cpp 中的头文件中。而不是这个使用 std::vector ...等。

其次,当你的 dll 接口包含 stl 时要小心。该库在 Release 和 Debug 版本方面有所不同,因此如果您在 Debug 程序中加载 Release dll,您可能会遇到问题。

于 2013-08-10T19:32:10.767 回答