Πόσο καλά τα πάει ο gcc με τα templates;
Chameleon
cham_gss at hotmail.com
Tue May 2 13:40:11 EEST 2006
Έχω gcc 3.4.2
Ενώ με Visual Studio 2005 ο παρακάτω κώδικας γίνεται κανονικότατα
compile και link, με το gcc πήρα το μπούλο.
(Μέχρι που το δοκίμασα μάλιστα, πίστευα οτι ο κώδικας είναι εντελώς
cross-platform γιατί δεν χρησιμοποιεί καμμία βιβλιοθήκη πέρα απο τις
standard)
------------------
template<class T>
static void Wastage1D::clever_erase(vector<T> &v, vector<typename
vector<T>::iterator> &its, vector<T> &vo)
{ ........ }
------------------
Έτρεξα τον gcc ως εξής:
gcc -c wastage1d.cpp
Το μήνυμα που πετάει ο gcc για τον παραπάνω κώδικα είναι:
------------------
wastage1d.cpp:140: error: cannot declare member function `static void
wastage::Wastage1D::clever_erase(std::vector<T, std::allocator<_CharT>
>&, std::vector<typename std::vector<T, std::allocator<_CharT>
>::iterator, std::allocator<typename std::vector<T,
std::allocator<_CharT> >::iterator> >&, std::vector<T,
std::allocator<_CharT> >&)' to have static linkage
wastage1d.cpp: In static member function `static void
wastage::Wastage1D::clever_erase(std::vector<T, std::allocator<_CharT>
>&, std::vector<typename std::vector<T, std::allocator<_CharT>
>::iterator, std::allocator<typename std::vector<T,
std::allocator<_CharT> >::iterator> >&, std::vector<T,
std::allocator<_CharT> >&)':
------------------
Δίνω μια πολύ μικρή πιθανότητα να φταίει το Visual Studio επειδή μου
επέτρεψε να γίνει compile κάτι που απαγορεύει η C++, αλλά ο κώδικας
είναι πολύ εντάξει ρε γμτ.
Ουσιαστικά δημιουργώ μια κλάση με άπειρα static members (απο τη στιγμή
που είναι template) και το instantiation μπορεί να γίνει οπουδήποτε μέσα
στον κώδικα και οποτεδήποτε. Το οτι όμως είναι static member δεν θα
έπρεπε να ενοχλεί την κλάση. Η μόνη σχέση που έχει με την κλάση, ενα
public static member είναι οτι βρίσκεται κάτω από το όνομά της.
Μεταξύ μας, δεν έχω πάρει ιδέα ποιά είναι η διαφορά μεταξύ gcc, g++ και
c++. Όλα το ίδιο δεν κάνουν;
More information about the Linux-greek-users
mailing list