class A<T>
, ve class B : public A<string>
bir derde sınıf sınıfım var.g ++ hatalar temel kurucu alan için ve parametreleri göz ardı eder
class A
, tek parametresi olarak bir tam sayı ve standart bir kopya kurucusu alan bir kurucuya sahiptir. Parametresiz bir varsayılan kurucuya sahip değil (tanımladığım bir tanıma sahip değil; derleyicinin, benim sorunumla ilgili olabilecek bir tane oluşturduğunu fark ediyorum).
class B
için yapıcı şöyle
: Ben alıyorum
B()
: A(37)
{
}
hataları şunlardır: a saha başlatma için
derleyici hataları temel kurucu çağrı
fileB.h: In constructor ‘B::B()’:
fileB.h:25: error: class ‘B’ does not have any field named ‘A’
Ve
Derleyici varsayılan olduğunu düşünüyor (eşit ameterless) taban sınıfı yapıcısı çağrıldığını ne eşleşmelidir ...
// Where is it getting this? A() is never written explicitly
fileB.h:25: error: no matching function for call to ‘A<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::A()’
fileA.h:37: note: candidates are: A<T>::A(const A<T>&) [with T = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]
... birini kullanılan ve varsayılan olmayan taban sınıfı inşaatçı hem anlaşılacağı ediliyor.
// This one matches A(37), right?
fileA.h:24: note: A<T>::A(const int&) [with T = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]
benim bilgisayarda benim kod derleme, ben herhangi bir hata alamadım çünkü bu hata, benim derleyici kurulmuş ya da yapılandırılmış bir şekilde geliyor inanıyorum ama, yukarıda listelenen hatalar olsun ben Her şeyi okulumun bilgisayarına yaz ve orada derle. Her iki yerde de g ++ kullanıyorum ama belli ki bir yerlerde bir miktar farklılık var. Bu fark nedir ve hata nereden kaynaklanıyor?
A'dan int'ye ne de tersi için herhangi bir dönüştürme işleci yok.
Her iki sistemde de C++ 03 kullanıyorum.
Burada hataları yeniden üreten bir tam kod örneği var (yine yalnızca bir sistem üzerinde):
/*******************************
* fileA.h
******************************/
template <class T>
class A
{
int member;
public:
A(const int & m)
: member(m)
{
}
A(const A & copyFrom)
{
member = copyFrom.member;
}
};
/*******************************
* fileB.h
******************************/
#include <string>
#include "fileA.h"
using namespace std;
class B : public A<string>
{
B()
: A(37)
{
}
};
Bunu nerede yapıyorum? –
'B sınıfı: genel sınıf A' - gerçekten bir "" A sınıfı sözcüğü ile gerçekten böyle derledim? –
AnT
Grr. Hayır, üzgünüm, bu sadece B sınıfı: A '. Şimdi düzenleyeceğim. –