gpt4 book ai didi

使用 typename 并将 typedef 传递给函数的 C++ 模板

转载 作者:太空狗 更新时间:2023-10-29 20:53:35 25 4
gpt4 key购买 nike

我正在以这种方式使用模板。

#define MAX_CARS 999
typedef char plate[20];

template <typename T>
int insert_ord (T V[], int ll, int const LF, T e);

它可以工作,但是当我将 typedef 作为参数传递时,它说:没有匹配函数来调用“insert_ord”。

这是主要的。

int main (void)
{
plate targhe[MAX_CARS];
int ll = 0;

plate targa;
cin >> targa;

ll = insert_ord(targhe, ll, MAX_CARS, targa);

cout << endl;
system("pause");
return 0;
}

最佳答案

template <typename T>
int insert_ord (T V[], int ll, int const LF, T e);

上面的函数模板不适用于以下类型的参数:

(int[999][20], int, int, int[20])

你的第一个参数insert_ord函数是 plate 的二维数组, 而最后一个是 plate 类型这是一个一维数组。您应该像这样声明函数模板:

template <typename T, int sizeOuter, int sizeInner>
int insert_ord (T (&v)[sizeInner][sizeOuter], int ll, int const LF, T (&e)[sizeOuter]);

查看Live On Coliru


但是,您的代码存在一些问题。你不需要那个 voidint main() .更喜欢constexpr#define如果可能的话。最重要的是,使用 std::array<T, N> 或者考虑将您的数据结构包装在 class 中或 struct

关于使用 typename 并将 typedef 传递给函数的 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42314092/

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