我正试图解决一个Trie问题,为此我创建了一个TrieNode
类,如下所示:
class TrieNode {
public:
bool isWord;
TrieNode* children[26];
TrieNode() {
isWord=false;
memset(children, NULL, sizeof(children)); //results in warning
};
};
这会导致一个警告:
警告:给void* memset(void*, int, size_t)的非指针参数2传递NULL [-Wconversion-null]
用nullptr
替换它会导致编译时错误:
错误:无法将'std::nullptr_t'转换为'int',因为参数'2'为'void* memset(void*, int, size_t)'
所以我的问题是,我如何将children
中的所有值初始化为NULL
/nullptr
?我尝试了一些选项,如children[26]={ nullptr };
,但这些都导致运行时错误(仅与memset(children, NULL, sizeof(children));
工作良好)。
if(!curr->children[index]) {
curr->children[index]=new TrieNode();
}
curr=curr->children[index];
你可以这样做:
class TrieNode
{
public:
bool isWord = false;
TrieNode* children[26]{};
TrieNode() = default;
};
最简单的c++选项是std::fill(std::begin(array), std::end(array), nullptr)
。
绕过这个问题的方法之一是传递0代替NULL,因为根据函数原型,第二个参数应该是一个整数。
memset(children, 0, sizeof(children));
参考这个,以防混淆0和NULL:NULL, ' '和0 ?