Share via


İşlev Satır İçi Kullanım Sorunları

İşlev inlining kullanıyorsanız şunları uygulamanız gerekir:

  • Dahil ettiğiniz üst bilgi dosyasında satır içi işlevlerin uygulanmasını sağlayın.

  • Üst bilgi dosyasında inlining AÇILDI.

// LNK2019_function_inline.cpp
// compile with: /c
// post-build command: lib LNK2019_function_inline.obj
#include <stdio.h>
struct _load_config_used {
   void Test();
   void Test2() { printf("in Test2\n"); }
};

void _load_config_used::Test() { printf("in Test\n"); }

Ve sonra,

// LNK2019_function_inline_2.cpp
// compile with: LNK2019_function_inline.lib
struct _load_config_used {
   void Test();
   void Test2();
};

int main() {
   _load_config_used x;
   x.Test();
   x.Test2();   // LNK2019
}

Derleyici yönergesini #pragma inline_depth kullanıyorsanız, 2 veya daha büyük bir değere sahip olduğunuzdan emin olun. Sıfır değeri, inlining özelliğini kapatır. Ayrıca /Ob1 veya /Ob2 derleyici seçeneklerini kullandığınızdan emin olun.

Farklı modüllerde satır içi ve satır içi olmayan derleme seçeneklerinin karıştırılması bazen sorunlara neden olabilir. İşlev satır içi oluşturma açık (/Ob1 veya /Ob2) ile bir C++ kitaplığı oluşturulduysa ancak işlevleri açıklayan ilgili üst bilgi dosyasında satır içi kapalıysa (seçenek yok), LNK2001 hata alırsınız. İşlevler üst bilgi dosyasındaki kodun içine alınmaz, ancak kitaplık dosyasında olmadığından başvuruyu çözümlemek için bir adres yoktur.

Benzer şekilde, işlev inlining kullanan ancak üst bilgi dosyası yerine .cpp dosyasındaki işlevleri tanımlayan bir proje de LNK2019 alır. Üst bilgi dosyası uygun görülen her yere eklenir, ancak işlevler yalnızca .cpp dosyası derleyiciden geçtiğinde çizilir; bu nedenle bağlayıcı, diğer modüllerde kullanıldığında işlevleri çözümlenmemiş dış değerler olarak görür.

// LNK2019_FIP.h
struct testclass {
   void PublicStatMemFunc1(void);
};

ve ardından,

// LNK2019_FIP.cpp
// compile with: /c
#include "LNK2019_FIP.h"
inline void testclass::PublicStatMemFunc1(void) {}

ve ardından,

// LNK2019_FIP_2.cpp
// compile with: LNK2019_FIP.cpp
// LNK2019 expected
#include "LNK2019_FIP.h"
int main() {
   testclass testclsObject;

   // module cannot see the implementation of PublicStatMemFunc1
   testclsObject.PublicStatMemFunc1();
}

Ayrıca bkz.

Bağlayıcı Araçları Hatası LNK2019