Anteckning
Å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.
"funktion" : Symbol som omfattar typ med intern länkning som inte har definierats
Anmärkningar
Kompilatorn har identifierat en användning av en funktion som inte har någon definition, men signaturen för den här funktionen omfattar typer som inte visas utanför den här översättningsenheten. Eftersom dessa typer inte är externt synliga kan ingen annan översättningsenhet ange en definition för den här funktionen, så programmet kan inte länkas.
Här är några typer som inte visas i översättningsenheter:
Typer som deklareras i ett anonymt namnområde
Lokala eller namnlösa klasser
Specialiseringar av mallar som använder dessa typer som mallargument.
Den här varningen är ny i Visual Studio 2017 version 15.8.
Example
Det här exemplet visar två C5046-varningar:
// C5046p.cpp
// compile with: cl /c /W2 C5046p.cpp
namespace {
struct S {
// S::f is inside an anonymous namespace and cannot be defined outside
// of this file. If used, it must be defined somewhere in this file.
int f();
};
}
// g has a pointer to an unnamed struct as a parameter type. This type is
// distinct from any similar type declared in other files, so this function
// cannot be defined in any other file.
// Note that if the struct was declared "typedef struct { int x; int y; } S, *PS;"
// it would have a "typedef name for linkage purposes" and g could be defined
// in another file that provides a compatible definition for S.
typedef struct { int x; int y; } *PS;
int g(PS p);
int main()
{
S s;
s.f(); // C5046 f is undefined and can't be defined in another file.
g(nullptr); // C5046 g is undefined and can't be defined in another file.
}
Du kan åtgärda dessa problem genom att definiera funktionerna i den här filen.