gpt4 book ai didi

C++。候选模板被忽略 - 无法将数组类型与自身匹配

转载 作者:行者123 更新时间:2023-11-30 01:34:44 25 4
gpt4 key购买 nike

我写了一个模板函数,它应该引用具有一定大小的 const 元素数组。但是由于某种原因编译器说这个函数不匹配,当我调用它时

#include<iostream>

struct Node
{
int key, left, right;
};

template <int N>
bool isCorrect(const Node (&nodes)[N])
{
// doesn't matter
return true;
}

int main ()
{
int n;
std::cin >> n;
Node nodes[n];
std::cout << (isCorrect(nodes) ? "CORRECT" : "iNCORRECT") << '\n';

return 0;
}

它给了我一个我无法破译的相当神秘的错误信息:

“忽略的候选模板无法匹配 **Node** 与 **Node”**。

我非常确定该模板可用于确定数组大小,就像我正在尝试做的那样,但这失败了。

这是因为我使用了非原始类型吗?

是的,我知道我可以使用 vector 并完全避免这个问题。但我真的很想知道当编译器无法将类型与自身匹配时到底发生了什么。

我可以做些什么来避免将来出现这种奇怪的消息?

最佳答案

当你这样写的时候:

int n;
std::cin >> n;

您在运行时为 n 赋值。

但是,模板参数必须在编译时 已知。这是因为编译器需要它们来生成函数(然后它将编译并导出到您的库)。

语法:

Node nodes[n];

被称为Variable Length Array ,它是一个编译器扩展。它不是可移植的 C++。编译器使它看起来像一个常规数组,但它不是。

要解决您的问题,n 必须在编译时已知:

constexpr int n = 1;
Node nodes[n];
std::cout << (isCorrect(nodes) ? "CORRECT" : "iNCORRECT") << '\n';

Live Demo

关于C++。候选模板被忽略 - 无法将数组类型与自身匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55694853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com