gpt4 book ai didi

c++ - 为什么使用 vector 会出现链接器错误?

转载 作者:太空狗 更新时间:2023-10-29 23:34:08 25 4
gpt4 key购买 nike

我有作业要编写自己的抽象类 Vector。我编写了一些代码,但是当我尝试编译它时出现错误。这是代码:

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';
}

ma​​in.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;
}

错误是:

g++ -c -o main.o main.cc
g++ -Wall -g vector.o main.o -o hw02vector
main.o: In function 'main':
main.cc:(.text+0x37): undefined reference to 'Vector<int>::push_back(int const&)'
collect2: ld returned 1 exit status
make: * [hw02vector] Error 1

最佳答案

出现链接器错误是因为对于 template 类,定义应该始终可见。或者您可以将 vector.cc 的所有内容移动到 vector.h 中。或者您可以在包含 vector.h 的任何地方简单地包含 vector.cc

旁注:

.h 文件中的以下行没有帮助:

#ifndef VECTOR__HH__
#define VECTOR__HH_

使两个宏相似,例如 VECTOR__HH。此宏用于避免文件的多重包含。

关于c++ - 为什么使用 vector 会出现链接器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5933212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com