2012-12-20 31 views
6

gcc/4.7 kullanıyorum ve şablon işleviyle (veya üye işlevinde) şablon şablonu argümanıyla bir sınıf oluşturmam gerekiyor. Ben kod çalıştırır snippet'te işaretli iki satır yorum olarak aşağıdaki hatayıŞablon şablon kodu çalışmıyor

test.cpp: In function 'void setup(Pattern_Type&)': 
test.cpp:17:34: error: type/value mismatch at argument 1 in template parameter list for 'template<template<class> class C> struct A' 
test.cpp:17:34: error: expected a class template, got 'typename Pattern_Type::traits' 
test.cpp:17:37: error: invalid type in declaration before ';' token 
test.cpp:18:5: error: request for member 'b' in 'a', which is of non-class type 'int' 

alıyoruz, bu nedenle A 'ana' ancak 'kurulum' in örneği olabilir. Bunun başkaları için de ilgi çekici olacağını düşünüyorum ve kodun çalışmadığının nedenini anlamaktan gerçekten çok mutlu olurdum. İşte herhangi bir öneri ve düzeltme için teşekkürler! Mauro

+0

MSVC10 altında derleme yapar. –

cevap

9

Bir şablon olarak Pattern_Type::traits işaretlemek gerekir: bu şablon parametresi Pattern_Type bağlıdır çünkü

A<Pattern_Type::template traits> a; 

Bu gereklidir.

traits şablon değil, bir tür olduğundan typename'u da kullanmamalısınız.

+0

Bu, denemediğim bir kombinasyon: typename olmayan şablon. Hala bana açık değil neden 'ana' 'şablon' belirtmek gerek yok. Süper hızlı cevap için teşekkürler! – user1919074

+1

@ user1919074: Çünkü 'main'da bir şablon parametresine bağlı değil (yani 'PT'nin içeriği zaten bilinir, ancak' Pattern_Type'ın içeriği bilinmeyebilir çünkü bir şey olabilir). Daha fazla bilgi için, bkz. "Şablon" ve "typename" anahtar sözcüklerini niçin ve niçin koymak zorundayım?] (Http://stackoverflow.com/questions/610245/where-and-why-do-i-have- to-put-the-put-the-put-the-put-typename-keywords) – interjay

+0

Doğru, bunu bilmeliydim ... – user1919074