gpt4 book ai didi

c++ - 错误 : no matching function for call to sort

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:01 25 4
gpt4 key购买 nike

来自 Matthew H. Austern 的 STL 书籍,固定大小数组的“ block ”类。

template<class T, size_t N>
struct Block
{
// Various typedef's

// Implementations of begin() and end().

reference operator[](size_t nIndex)
{
return data[nIndex];
}

// I added this overloaded operator+
T* operator+(const size_t nIncrement)
{
return (data + nIncrement);
}

// I added this overloaded cast operator
// **Why is this cast operator not being called?**
operator T*()
{
return data;
}

T data[N];
};

这就是我想要做的:

Block<int, 10> tArray; // Populate tArray.

// I want to use std::sort() in the same way as I would
// for a regular array.
sort(tArray, tArray + tArray.size());

我得到编译器错误:

错误:调用 sort(Block&, int*) 时没有匹配的函数

为什么编译器不知道重载的转换运算符?

以下所有编译:

sort(tArray + 0, tArray + tArray.size());
sort(static_cast<int*>(tArray), tArray + tArray.size());
sort(tArray.begin(), tArray.end());

显然,重载转换操作符是有原因的我不知道的工作。有什么想法吗?

谢谢。

约束:

我可能不会使用 C++11(因此没有来自 C++11 的 std::array)。我可能不会使用 begin() 或 end()。

最佳答案

您可以使用的要求begin()也不end()是有问题的。排序需要随机访问迭代器;见Bjarne Stroustrup The C++ programming language 4th edition std::sort .

使用显式转换和指针运算,您应该能够执行以下操作:

例如让 T std::string , 让 N 为 42,令 b 一个初始化的 Block<T,N> :

Block<std::string, 42> b;
std::string* begin = (std::string*)b;
std::string* end = begin + 42; // Or if Block has Block.size()
// std::string* end = begin + b.size()

std::sort(begin, end);

现在 b 包含根据 bool operator<(const std::string&, const std::string&) 排序的字符串.

关于c++ - 错误 : no matching function for call to sort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32152531/

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