Olası Çoğalt:.template (nokta-şablon) yapı kullanım
#include <iostream> template <int N> struct Collection { int data[N]; Collection() { for(int i = 0; i < N; ++i) { data[i] = 0; } }; void SetValue(int v) { for(int i = 0; i < N; ++i) { data[i] = v; } }; template <int I> int GetValue(void) const { return data[I]; }; }; template <int N, int I> void printElement(Collection<N> const & c) { std::cout << c.template GetValue<I>() << std::endl; /// doesn't compile without ".template" } int main() { Collection<10> myc; myc.SetValue(5); printElement<10, 2>(myc); return 0; }
O: Ben bir kod garip segmenti rastlamak ettik
Where and why do I have to put the “template” and “typename” keywords?
.template anahtar kelimesi olmadan derlenmemiştir printElement işlevi. Bunu daha önce hiç görmedim ve ne için gerekli olduğunu anlamıyorum. Kaldırmaya çalışırken, şablonla ilgili derleme hatalarım var. Öyleyse böyle bir yapı kullanıldığı zaman sorum var mı? Yaygın mıdır
: Daha fazla ayrıntı açıklama için
, burada kabul cevabı okundu belirteçleri, bir nokta, ardından "template" anahtar sözcüğünü takip eder. Ayrıca yazmak için yasal olurdu c. Şablon GetValue '. 'Template', 'GetValue' üye işlevine bağlı, nokta değil. – jalf