Wenn ich einen Funktionszeiger in C++ mit dem ternären Operator definieren, bekomme ich den Compilerfehler overloaded function with no contextual type information
. Ich bin verwirrt. Könnte mir jemand den Grund für dieses Verhalten erklären?Funktion Zeigerdefinition auf ternären Operator
#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;
}
Haben wollen Sie schreiben: (argc> 1)? my_strstr1: my_strstr2; – user3286661
@ user3286661 Nein, OP möchte die Standardbibliothek 'strstr' verwenden. –
Dann voran mit std :: – user3286661