Bagikan melalui


Compiler Warning (level 2) C5046

'function' : Simbol yang melibatkan jenis dengan linkage internal tidak ditentukan

Keterangan

Pengkompilasi telah mendeteksi penggunaan fungsi yang tidak memiliki definisi, tetapi tanda tangan fungsi ini melibatkan jenis yang tidak terlihat di luar unit terjemahan ini. Karena jenis ini tidak terlihat secara eksternal, tidak ada unit terjemahan lain yang dapat memberikan definisi untuk fungsi ini, sehingga program tidak dapat berhasil ditautkan.

Jenis yang tidak terlihat di seluruh unit terjemahan meliputi:

  • Jenis yang dideklarasikan di dalam namespace anonim

  • Kelas lokal atau tidak disebutkan namanya

  • Spesialisasi templat yang menggunakan jenis ini sebagai argumen templat.

Peringatan ini baru di Visual Studio 2017 versi 15.8.

Contoh

Sampel ini menunjukkan dua peringatan C5046:

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

Untuk memperbaiki masalah ini, tentukan fungsi dalam file ini.