Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
"expression": felaktigt argument till "decltype"
Anmärkningar
Kompilatorn kan inte härleda typen av uttryck som är argumentet till uttryckstypsspecificerarendecltype().
Example
I följande kodexempel kan kompilatorn inte härleda typen av myFunction argument eftersom myFunction den är överbelastad. För att åtgärda det här problemet kan du använda static_cast för att skapa en pekarinstans till den specifika överlagrade funktionen som kan specificeras i decltype-uttrycket.
// C3556.cpp
// compile with: cl /W4 /EHsc C3556.cpp
#include <iostream>
void myFunction(int);
void myFunction(float, float);
void callsMyFunction(decltype(myFunction) fn); // C3556
// One way to fix is to comment out the line above, and
// use static_cast to create specialized function pointer
// instances:
auto myFunctionInt = static_cast<void(*)(int)>(myFunction);
auto myFunctionFloatFloat = static_cast<void(*)(float,float)>(myFunction);
void callsMyFunction(decltype(myFunctionInt) fn, int n);
void callsMyFunction(decltype(myFunctionFloatFloat) fn, float f, float g);
void myFunction(int i) {
std::cout << "called myFunction(" << i << ")" << std::endl;
}
void myFunction(float f, float g) {
std::cout << "called myFunction(" << f << ", " << g << ")" << std::endl;
}
void callsMyFunction(decltype(myFunctionInt) fn, int n) {
fn(n);
}
void callsMyFunction(decltype(myFunctionFloatFloat) fn, float f, float g) {
fn(f, g);
}
int main() {
callsMyFunction(myFunction, 42);
callsMyFunction(myFunction, 0.1f, 2.3f);
}