无法引用默认构造函数 - 它是VS中的已删除函数

时间:2015-09-14 16:46:28

标签: c++ visual-studio

我尝试在Visual Studio 2015社区中编译来自https://github.com/zcbenz/BPlusTree的代码。代码可以用gcc编译,但在VS中,我得到了

  

无法引用“bpt :: internal_node_t”的默认构造函数 - 它是已删除的函数

结构如下:

struct internal_node_t {
    typedef index_t * child_t;

    off_t parent; /* parent node offset */
    off_t next;
    off_t prev;
    size_t n; /* how many children */
    index_t children[BP_ORDER];
}; 

引用可以在bpt.cc的任何地方看到,就像这样

internal_node_t parent;

我真的没有得到消息的含义。如何在VS中编译代码?

某种类型定义更新:

struct key_t {
    char k[16];

    key_t(const char *str = "")
    {
        bzero(k, sizeof(k));
        strcpy_s(k, str);
    }
};
typedef unsigned int     size_t;

struct index_t {
    key_t key;
    off_t child; /* child's offset */
};

我在off_t中使用<sys\types.h>,在#define bzero(ptr, size) memset(ptr, 0, size)使用marco bzero

我还写了另一个这样的程序:

#include <sys/types.h>
#include <string.h>

#define bzero(ptr, size) memset(ptr, 0, size)

struct key_t {
    char k[16];

    key_t(const char *str = "")
    {
        bzero(k, sizeof(k));
        strcpy_s(k, str);
    }
};
struct index_t {
    key_t key;
    off_t child; /* child's offset */
};



struct internal_node_t {
    typedef index_t * child_t;

    off_t parent; /* parent node offset */
    off_t next;
    off_t prev;
    size_t n; /* how many children */
    index_t children[20];
};

int main() {
    internal_node_t t;
}

适用于VS2015。

1 个答案:

答案 0 :(得分:2)

我发现依赖于POSIX类型的代码库不太可能在针对Windows的编译器中编译。也许你应该尝试像Cygwin这样的东西。

例如,off_tkey_t都来自<sys/types.h>。作者甚至不打算包括这个标题,给人一​​种虚假的便携感。

注意:VS2015确实有off_t。实际问题似乎是System V IPC(<sys/ipc.h>,关注key_t的实际标头),这是特定于Linux的。