Đoạn mã sau không thể biên dịch được. Lỗi này có vẻ là một số loại cuộc gọi không rõ ràng đối với thường trình hợp nhất. Sự hiểu biết của tôi là STL có một thủ tục hợp nhất được tìm thấy trong không gian tên std, nhưng theo như tôi có thể nói tên hợp nhất trong mã dưới đây phải là duy nhất.Lỗi trình biên dịch C++ không rõ ràng
Nếu tôi đổi tên hợp nhất thành xmerge, mọi thứ sẽ hoạt động. Vấn đề có thể là gì? xung đột tên đến từ đâu?
#include <iostream>
#include <iterator>
#include <vector>
template<typename InputIterator1,
typename InputIterator2,
typename OutputIterator>
void merge(const InputIterator1 begin1, const InputIterator1 end1,
const InputIterator2 begin2, const InputIterator2 end2,
OutputIterator out)
{
InputIterator1 itr1 = begin1;
InputIterator2 itr2 = begin2;
while ((itr1 != end1) && (itr2 != end2))
{
if (*itr1 < *itr2)
*out = *itr1, ++itr1;
else
*out = *itr2, ++itr2;
++out;
}
while (itr1 != end1) *out++ = *itr1++;
while (itr2 != end2) *out++ = *itr2++;
}
int main()
{
std::vector<int> l1;
std::vector<int> l2;
std::vector<int> merged_list;
merge(l1.begin(),l1.end(),
l2.begin(),l2.end(),
std::back_inserter(merged_list));
return 0;
}
Thông báo lỗi là gì? Trình biên dịch của tôi không phàn nàn, nó biên dịch mã tốt. – Oswald
Biên dịch tốt ở đây. (gcc 4.4.3) –
Tại sao tôi nên đặt tên khác? Tôi không sử dụng không gian tên std. –