三項演算子を使って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