2014-11-22 91 views
1

我想在C++中做一个简单的边界检查数组。我已经在头文件中声明了一个类,并在一个单独的源文件中定义了这个类。编译步骤运行正常,但是当我尝试将对象链接,我得到以下错误:未定义的参考错误在C++链接步骤

$ g++.exe -o a.exe src\main.o src\array.o 
src\main.o: In function `main': 
../src/main.cpp:7: undefined reference to `Array<int>::Array(int)' 
../src/main.cpp:9: undefined reference to `Array<int>::operator[](int)' 
../src/main.cpp:10: undefined reference t o `Array<int>::operator[](int)' 
../src/main.cpp:11: undefined reference t o `Array<int>::operator[](int)' 
../src/main.cpp:13: undefined reference t o `Array<int>::operator[](int)' 
../src/main.cpp:7: undefined reference to `Array<int>::~Array()' 
../src/main.cpp:7: undefined reference to `Array<int>::~Array()' 
collect2.exe: error: ld returned 1 exit status 

的main.cpp

#include <iostream> 
#include "array.hpp" 

using namespace std; 

int main() { 
    Array<int> x(10); // compiler error 

    x[0] = 1; // compiler error 
    x[1] = 2; // compiler error 
    x[2] = 3; // compiler error 

    cout << x[1] << endl; // compiler error 

    return 0; 
} 

array.hpp

#ifndef ARRAY_HPP_ 
#define ARRAY_HPP_ 

template <class T> 
class Array{ 
private: 
    T* array; 
    int length_; 
public: 
    Array(int); 
    ~Array(); 
    int Length(); 
    int& operator[](int); 
}; 

#endif /* ARRAY_HPP_ */ 

阵列。 cpp

#include "array.hpp" 

template <class T> 
Array<T>::Array(int size) { 
    length_ = size; 
    array = new T[size]; 
} 

template <class T> 
Array<T>::~Array() { 
    delete[] array; 
} 

template <class T> 
int Array<T>::Length() { 
    return length_; 
} 

template <class T> 
int& Array<T>::operator[](const int index) { 
    if (index < 0 || index >= length_) { 
    throw 100; 
    } 
    return array[index]; 
} 

回答

1

members of a templa te类应该在模板类自己定义的相同头文件中。

1

模板类必须在头文件中包含所有代码,或者它们只能用于在cpp文件中显式实例化的类型。