Tôi thực sự không biết viết gì trong tiêu đề, nhưng về cơ bản tôi có một tệp .cpp, chỉ có tiêu đề thư viện chuẩn và không sử dụng từ khóa. Tôi đã tạo ra hàm "generate (...)" của riêng mình. Sau khi bao gồm thư viện, Visual Studio cho tôi thấy một lỗi (nơi mà hàm đang được gọi), về cơ bản nói rằng nó không biết nên chọn std :: generate (...) hoặc generate (...) bởi vì chúng có danh sách đối số phù hợp.Cảnh báo Visual Studio về chức năng không có trong không gian tên chung
Đây có phải là lỗi hoặc tôi đã bỏ lỡ điều gì đó không? Tôi cũng có thể thêm rằng tôi đang sử dụng VS2015.
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
template<typename Iter, typename Function>
Function generate(Iter begin, Iter end, Function f)
{
while (begin != end)
{
*begin = f();
++begin;
}
return f;
}
class Random
{
public:
Random(int low, int high)
: mLow(low), mHigh(high)
{}
int operator()()
{
return mLow + rand() % (mHigh - mLow + 1);
}
private:
int mLow;
int mHigh;
};
class Print
{
void operator()(int t)
{
std::cout << t << " ";
}
};
int main()
{
srand(time(0));
std::vector<int> intVec;
intVec.resize(15);
Random r(2, 7);
generate(intVec.begin(), intVec.end(), r);
}
Lỗi đầu ra:
1>------ Build started: Project: Functor, Configuration: Debug Win32 ------
1> Main.cpp
1>c:\users\michael sund\documents\visual studio 2015\projects\gi_cpp\functor\main.cpp(44): warning C4244: 'argument': conversion from 'time_t' to 'unsigned int', possible loss of data
1>c:\users\michael sund\documents\visual studio 2015\projects\gi_cpp\functor\main.cpp(50): error C2668: 'generate': ambiguous call to overloaded function
1> c:\users\michael sund\documents\visual studio 2015\projects\gi_cpp\functor\main.cpp(7): note: could be 'Function generate<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>,Random>(Iter,Iter,Function)'
1> with
1> [
1> Function=Random,
1> Iter=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>
1> ]
1> c:\program files (x86)\microsoft visual studio 14.0\vc\include\algorithm(1532): note: or 'void std::generate<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>,Random>(_FwdIt,_FwdIt,_Fn0)' [found using argument-dependent lookup]
1> with
1> [
1> _FwdIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>,
1> _Fn0=Random
1> ]
1> c:\users\michael sund\documents\visual studio 2015\projects\gi_cpp\functor\main.cpp(50): note: while trying to match the argument list '(std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>, std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>, Random)'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Vui lòng đăng mã có liên quan, tốt nhất là [MCVE] (http://stackoverflow.com/help/mcve). –
... và văn bản lỗi * nguyên văn *. – WhozCraig
Bạn đã trả lời câu hỏi của riêng mình: bạn có hai hàm có cùng tên và cùng một chữ ký. Sử dụng ':: generate()' để nói cho trình biên dịch bạn muốn "phiên bản của bạn". Tốt hơn, hãy xem xét việc tạo không gian tên của riêng bạn. Hoặc cho chức năng của bạn một tên khác. – paulsm4