我有作業寫我自己的抽象類矢量。我做了一些代碼,但是當我嘗試編譯它時,我有錯誤。這是代碼:爲什麼要獲得鏈接器錯誤與向量?
vector.hh:
#ifndef VECTOR__HH__
#define VECTOR__HH_
template<class T> class Vector {
int capacity_;
int size_;
T* buffer_;
void ensure_capacity(unsigned size);
public:
Vector(int capacity=10)
: capacity_(capacity), size_(0), buffer_(new T[capacity])
{ }
~Vector() {
delete []buffer_;
}
int size() const {
return size_;
}
bool empty() const {
return size_ == 0;
}
T& operator[](int n) {
return buffer_[n];
}
const T& operator[](int n) const {
return buffer_[n];
}
void clear() {
// TODO
}
int capacity() const {
return capacity_;
}
T& front() {
return buffer_[0];
}
const T& front() const {
return buffer_[0];
}
T& back() {
return buffer_[size_-1];
}
const T& back() const {
return buffer_[size_-1];
}
void push_back(const T& value);
};
#endif
vector.cc:
#include "vector.hh"
template<class T>
void Vector<T>::ensure_capacity(unsigned size) {
if(capacity_>size+1) {
return;
}
capacity_ = capacity_ ==0?1:capacity_;
while(capacity_<size+1) {
capacity_*=2;
}
T* old_buffer = buffer_;
buffer_ = new T[capacity_];
memcpy(buffer_, old_buffer, sizeof(T)*size_);
delete [] old_buffer;
}
template<class T>
void Vector<T>::push_back(const T& value) {
ensure_capacity(size()+1);
buffer_[size_] = value;
size_++;
buffer_[size_] = '/0';
}
main.cc:
#include "vector.hh"
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
Vector<int> v(2);
v.push_back(10);
cout << v[0];
return 0;
}
和錯誤是:
克++ -c -o main.o main.cc 克++ -Wall -g vector.o main.o -o hw02vector
main.o:在功能'main'
:
main.cc:(.text+0x37):未定義參照'Vector<int>::push_back(int const&)'
collect2:LD返回1個退出狀態
化妝: * [hw02vector]錯誤1 0
[此問題](http://stackoverflow.com/questions/3749099/)可能會有所幫助。 – 2011-05-09 06:24:26
+1實際上做了努力,並提出了一個問題,而不是簡單地要求編碼! :) – Nim 2011-05-09 08:11:50
請注意,雙下劃線是爲庫執行者保留的 – 2012-02-24 15:42:15