如何解决此编译错误?编译日志说调用者和候选者是完全相同的,但是有超载和暧昧? 代码:
Ctrl.h
namespace CvRcgCtrllr {
bool AssignPidsTo(const list<unsigned int> & pids, CvRcg & rcg);
bool RemovePidsFrom(const list<unsigned int> & pids, CvRcg & rcg);
};
Ctrl.cpp
using namespace CvRcgCtrllr;
30 bool AssignPidsTo(const list<unsigned int> & pids, Rcg & rcg)
31 {
44 return true;
45 }
46
47 bool RemovePidsFrom(const list<unsigned int> & pids, Rcg & rcg)
48 {
49
50 //Rcg default_rcg = GetNewRcg("default");
51 //bool res = AssignPidsTo(pids, default_rcg);
52 return res;
53 }
<!-- -->
CvRcgCtrllr.cpp: In function ‘bool RemovePidsFrom(const std::list<unsigned int, std::allocator<unsigned int> >&, Rcg&)’:
CvRcgCtrllr.cpp:51: error: call of overloaded ‘AssignPidsTo(const std::list<unsigned int, std::allocator<unsigned int> >&, Rcg&)’ is ambiguous
CvRcgCtrllr.cpp:30: note: candidates are: bool AssignPidsTo(const std::list<unsigned int, std::allocator<unsigned int> >&, Rcg&)
CvRcgCtrllr.h:20: note: bool CvRcgCtrllr::AssignPidsTo(const std::list<unsigned int, std::allocator<unsigned int> >&, Rcg&)
答案 0 :(得分:1)
替换
using namespace CvRcgCtrllr;
通过
namespace CvRcgCtrllr
{
// Your code of the file
}
答案 1 :(得分:1)
您只能通过执行
来定义命名空间成员using namespace CvRcgCtrllr;
然后指定没有范围解析运算符的成员。它不起作用,因为你认为它的工作原理。在您的代码中,您在CvRcgCtrllr
中声明了一对函数,然后在 global 命名空间中另外定义了一对完全独立的函数。这是导致重载决策过程中出现歧义的原因。
为了在CvRcgCtrllr
文件中的.cpp
命名空间定义您的函数,您必须重新打开命名空间
namespace CvRcgCtrllr
{
bool AssignPidsTo(const list<unsigned int> & pids, Rcg & rcg)
{
// Whatever
}
}
或使用函数的限定名称
bool CvRcgCtrllr::AssignPidsTo(const list<unsigned int> & pids, Rcg & rcg)
{
// Whatever
}
没有办法避免这个或那个。 using namespace CvRcgCtrllr;
在这里不会帮到你。