Bölme sınıflara C şablon oluşturdu .dosyaları mümkün hpp/.cpp ?
Hatalar .hpp
.cpp
dosya arasında bölünmüş C sınıf bir şablon derlemeye çalışıyorum alıyorum:
$ g -c -o main.o main.cpp
$ g -c -o stack.o stack.cpp
$ g -o main main.o stack.o
main.o: In function `main':
main.cpp:(.text 0xe): undefined reference to 'stack<int>::stack()'
main.cpp:(.text 0x1c): undefined reference to 'stack<int>::~stack()'
collect2: ld returned 1 exit status
make: *** [program] Error 1
İşte benim kod:
yığın.hes:
#ifndef _STACK_HPP
#define _STACK_HPP
template <typename Type>
class stack {
public:
stack();
~stack();
};
#endif
stack.cpp:
#include <iostream>
#include "stack.hpp"
template <typename Type> stack<Type>::stack() {
std::cerr << "Hello, stack " << this << "!" << std::endl;
}
template <typename Type> stack<Type>::~stack() {
std::cerr << "Goodbye, stack " << this << "." << std::endl;
}
main.cpp:
#include "stack.hpp"
int main() {
stack<int> s;
return 0;
}
ld
elbette doğrudur: simgeler stack.o
. değil
this question cevabı zaten yazıyor gibi yapıyorum yardım etmez.
This one yardımcı olabilir, ama .hpp
dosyası içine her yöntem hareket-etmek istemiyorum, gerek yok, ben mi söyleyeyim?
Tek mantıklı çözüm .hpp
dosya .cpp
dosyasındaki her şeyi taşımak, ve sadece her şeyi dahil etmek yerine, bağımsız bir nesne dosyası olarak link? Bu gibi görünüyorçokçirkin! Bu durumda, benim önceki durumuna döner ve stack.hpp
stack.cpp
yeniden adlandırın ve onunla yapılabilir.
CEVAP
mümkün ihtiyacımız olacak ne biliyorsun sürece.
Stack.cpp sonunda aşağıdaki kodu ekleyin ve bu iş olacak :
template class stack<int>;
Yığın olmayan şablon tüm yöntemler oluşturulacak ve adım bağlama iyi çalışır.
`git status` mümkün sadece değiştirilm...
Excel UTF-8 CSV dosyaları otomatik ola...
&Genişletmeden quot;mağaza" bir ş...
S3cmd ile başka bir S3 kova tüm dosyal...
Mümkün MSBuild dosyaları (visual studi...