當我使用三元運算符在C++中定義函數指針時,我得到編譯器錯誤overloaded function with no contextual type information
。 我很困惑。有人能解釋我這種行爲的原因嗎?三元運算符上的函數指針定義
#include <string>
#include <string.h>
#include <iostream>
const char *my_strstr1 (const char *__haystack, const char *__needle) {
std::cout << "my_strstr" << std::endl;
return strstr(__haystack, __needle);
}
const char *my_strstr2 (const char *__haystack, const char *__needle) {
std::cout << "my_strstr2" << std::endl;
return strstr(__haystack, __needle);
}
int main(int argc, char** argv) {
std::cout << "argc:" << argc << std::endl;
//ok
// const char* (*StrStr)(const char*, const char*) = strstr;
// const char* (*StrStr)(const char*, const char*) = (argc > 1) ? my_strstr2 : my_strstr1;
// error: overloaded function with no contextual type information
const char* (*StrStr)(const char*, const char*) = (argc > 1) ? my_strstr1 : strstr;
StrStr("helloworld", "h");
return 0;
}
部分5.16你希望寫:(ARGC> 1)? my_strstr1:my_strstr2; – user3286661
@ user3286661不,OP想要使用標準庫'strstr'。 –
然後用std加上它: – user3286661