Aracılığıyla paylaş


Derleyici Hatası C2555

'class1::function1': sanal işlev dönüş türünün geçersiz kılınması farklıdır ve 'class2::function2' ile aynı değişken değildir

Açıklamalar

Sanal işlev ve türetilmiş geçersiz kılma işlevi aynı parametre listelerine ancak farklı dönüş türlerine sahiptir.

C++'ta, türetilmiş bir sınıfta geçersiz kılma işlevi yalnızca temel sınıftaki bir sanal işlevden dönüş türüne göre farklılık gösteremez.

Bazı dönüş türleri için bu kuralda bir özel durum vardır. Türetilmiş bir sınıf ortak bir temel sınıfı geçersiz kıldığında, temel sınıf işaretçisi veya başvurusu yerine türetilmiş sınıfa yönelik bir işaretçi veya başvuru döndürebilir. Bu dönüş türleri, türüyle birlikte farklılık gösterdiğinden kovaryant olarak adlandırılır. Bu kural özel durumu, birlikte değişkenli işaretçi başvurusuna veya işaretçiden işaretçiye türlere izin vermez.

Hatayı düzeltmenin bir yolu, temel sınıfla aynı türü döndürmektir. Ardından, sanal işlev çağrıldıktan sonra dönüş değerini yayınlayın. Bir diğeri de türetilmiş sınıf üyesi işlevini geçersiz kılma yerine aşırı yükleme yapmak için parametre listesini değiştirmektir.

Örnekler

ile /clrderlediyseniz bu hatayı görebilirsiniz. Örneğin, C++ ile aşağıdaki C# bildirimi eşdeğeri:

Guid[] CheckSources(Guid sourceID, Guid[] carouselIDs);

%

Guid CheckSources(Guid sourceID, Guid carouselIDs[]) [];

Aşağıdaki örnek C2555 oluşturur:

// C2555.cpp
// compile with: /c
struct X {
   virtual void func();
};
struct Y : X {
   char func();  // C2555
   void func2();   // OK
};

Düzeltmek için dönüş türünü Y::func olarak voiddeğiştirin.