gpt4 book ai didi

c++ - 错误 : call of overloaded is ambiguous

转载 作者:行者123 更新时间:2023-11-30 03:43:20 24 4
gpt4 key购买 nike

bool find_solutions(const string if_need_all, vector< vector<char> > table, vector<int> ships, int row[], int col[]){
sort(ships.begin(), ships.end(), greater<int>());//sort the ship length in descending order
static int counter = 0; //counter that tracks if the ship is to be placed vertically or horizontally
static int s = 0; //index of ship using
int fill;//ship to fill
int filling;//keep track how much the ship has been filled
if(s == ships.size()) return true;
for(unsigned int i = 0; i<table.size(); ++i){
filling = 0;
fill = ships[s];
for(unsigned int j = 0; j<table[i].size(); ++j){
if(counter == 0 && insertable(table,row,col,i,j,counter,fill)){
while(filling<fill){
table[i][j+filling] = fill;
col[j+filling]--;
filling++;
}
row[i] -= fill; s++;
find_solutions(if_need_all, table, ships, row,col);
}
else{
counter++;
}
if(counter == 1 && insertable(table,row,col,i,j,counter,fill)){
while(filling<fill){
table[i+filling][j] = fill;
row[i+filling]--;
filling++;
}
col[j] -= fill; s++;
find_solutions(if_need_all, table, ships, row, col);
}
else{
counter--;
}
}
}
if(s != ships.size()) return false;
else return true;
}
main.cpp: In function ‘bool find_solutions(std::__cxx11::string, std::vector<std::vector<char> >, std::vector<int>, int*, int*)’:
main.cpp:277:67: error: call of overloaded ‘insertable(std::vector<std::vector<char> >&, int*&, int*&, unsigned int&, unsigned int&, int&, int&)’ is ambiguous
if(counter == 0 && insertable(table,row,col,i,j,counter,fill)){
^
main.cpp:13:6: note: candidate: bool insertable(const std::vector<std::vector<char> >&, const int*, const int*, int, int, int, int)
bool insertable(const vector< vector<char> >& inboard, const int r[], const int c[],
^
main.cpp:125:6: note: candidate: bool insertable(std::vector<std::vector<char> >, const int*, const int*, int, int, int, int)
bool insertable(const vector< vector<char> > inboard,const int r[], const int c[],co
^

谁能告诉我我犯了什么错误?网上查了一下,网站上说要么是多次创建的变量,要么是函数名已经存在于STL库中。我检查了这两个条件,但它们不适用于我的问题。是填充导致问题还是其他变量,还是函数?

最佳答案

您已经使用以下参数类型重载了 insertable()

bool insertable(const std::vector<std::vector<char> >&,
const int*, const int*, int, int, int, int)

bool insertable(std::vector<std::vector<char> >,
const int*, const int*, int, int, int, int)

让我们假设 T

typedef std::vector<std::vector<char> > T;

两个方法定义中的第一个参数是不明确的,因为两个方法都可以接受类型 TT& 作为第一个参数,所以编译器无法决定重载哪个方法调用。顺便说一句,您不应该创建在 reference 中不同的重载方法,而应该使用完全不同的类型。因为类型和它的引用总是兼容的,所以被认为是相同的。

例如。 intint& 是兼容的,所以insertable(int a)insertable(int& b) 是一样的。如果您像下面这样调用此方法,编译器将无法决定调用哪个方法。

int x = 20;
insertable(x);

同理,如果你在函数调用中使用非const T,下面的定义也是一样的。

bool insertable(const T&, const int*, const int*, int, int, int, int)

bool insertable(T, const int*, const int*, int, int, int, int)

@M.M在评论中:

Tconst T& 总是不明确的。但是,当参数是一个右值 时,TT& 是没有歧义的。 右值 不能绑定(bind)到 T&rvalueslvalues 单独重载是一个有效的用例/p>

关于c++ - 错误 : call of overloaded is ambiguous,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36169816/

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