Aracılığıyla paylaş


Derleyici Uyarısı (düzey 2) C5046

'function' : İç bağlantı tanımlanmamış türü içeren simge

Açıklamalar

Derleyici, tanımı olmayan bir işlevin kullanıldığını algılamıştır, ancak bu işlevin imzası bu çeviri biriminin dışında görünmeyen türleri içerir. Bu türler dışarıdan görünür olmadığından, başka hiçbir çeviri birimi bu işlev için bir tanım sağlayamaz, bu nedenle program başarıyla bağlanamaz.

Çeviri birimlerinde görünmeen türler şunlardır:

  • Anonim ad alanında bildirilen türler

  • Yerel veya adlandırılmamış sınıflar

  • Bu türleri şablon bağımsız değişkenleri olarak kullanan şablonların uzmanlıkları.

Bu uyarı Visual Studio 2017 sürüm 15.8'de yenidir.

Örnek

Bu örnekte iki C5046 uyarısı gösterilmektedir:

// 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.
}

Bu sorunları düzeltmek için bu dosyadaki işlevleri tanımlayın.