, kodu"Geçersiz şablon argümanı" hata ama GCC değil
template <template<class> class BaseType>
class EST16
: public BaseType<int>
{
public:
EST16(double d)
{
}
};
template <class T>
class SCEST
{
T y;
};
typedef EST16<SCEST> EST16_SC;
class Child
: public EST16_SC
{
public:
Child()
: EST16_SC(1.0)
{
}
};
class NotWorkingChild
: public EST16<SCEST>
{
public:
NotWorkingChild()
: EST16<SCEST>(1.0)
{
}
};
TEST(TemplateTest, TestInstantiate)
{
Child child;
NotWorkingChild notWorkingChild;
}
Çocuğa Sahip ve typedef sadece farklılık NotWorkingChild varsayalım.
2>..\..\..\src\itenav\test\SCKFErrorStateTest.cpp(43) : error C3200: 'SCEST<T>' : invalid template argument for template parameter 'BaseType', expected a class template
2> with
2> [
2> T=int
2> ]
sen neden bu durumda açıklayabilir: GCC olarak NotWorkingChild yapıcısı aşağıdaki hata üretir Visual Studio, derleme hem? Typedef daha iyi bir taşınabilir çözüm var mı?
Teşekkürler!
sadece şablon sınıf adı, EST16 başvurmak için Başlatıcı değiştirmek eğer VS derler
aslında başlatır ve şablon sınıfları kullanan herhangi bir kod yazdım? Bununla demek istediğim, 'ana' demek. neler olabileceğini bir şey 'typedef' görünce Çocuğunuz sınıfların biri gerçekten kullanılana kadar GCC rahatsız etmez iken VCC, örnekleme testleri olmasıdır. Bu doğruysa, çocuk sınıfı şablonlarından birini kullanan bir kod yazdığınız anda GCC'de de hatalar alırsınız. – phooji
Evet, yaptım. TEST makrosu, aslında main() 'den çağrılan bir Google Testi oluşturur. – Philipp
Maalesef - "TEST" makrosu kaydırma eşiğimin hemen ardındanydı, bu yüzden kaçırdım. Bunun neden başarısız olduğunu% 100 değilim, ancak derleyiciler arasında daha taşınabilir olması gereken alternatif bir yaklaşım yayınladım. Aynı zamanda benim düşünceme göre daha kolay okunabilir, bu – phooji