c++ 编译出现 undefined reference to,检查了很多遍还是没发现错误。

有三个文件,一个主程序main.cxx,一个function.cxx,还有一个头文件vector.h

没办法都复制上来,超出字数了。
网上看到很多情况是main和function的文件没有连接头文件,但是我都有把#include <vector>加在在两个cxx文件开头。

#include <iostream>
#include <vector>
#include "Vector.h"

编译的时候出现的问题,在commande 里面出现的。。
--------------------------------------------------------------------------------------------
g++
-c fonction_exo3.cxx

g++
-c exo3.cxx

g++
-o exo3 fonction_exo3.o exo3.o

exo3.o:
In function `main':

exo3.cxx:(.text+0x6e):
undefined reference to `Vector<int>::Vector(int, int)'

exo3.cxx:(.text+0x7a):
undefined reference to `Vector<int>::size()'

exo3.cxx:(.text+0x9f):
undefined reference to `Vector<int>::capacity()'

exo3.cxx:(.text+0xc9):
undefined reference to `Vector<int>::~Vector()'

exo3.cxx:(.text+0xe1):
undefined reference to `Vector<int>::~Vector()'

collect2:
ld returned 1 exit status

make:
*** [prog] Error 1

这两个文件单独编译都没有问题,只是最后组在一起出现问题了。。结果就是所有我在主程序中用的函数都无法找到。

这是我的头文件
---------------------------------------------------------------------------------------------------------------
#ifndef _H_INCLUDED
#define _H_INCLUDED

using namespace std;

template <class numtype>

class Vector
{
private:
numtype *_valeur;
int _size;

public:
Vector(); // constructeur par defaut
Vector(const Vector &); //constructeur par recopier
~Vector();
Vector(int, numtype); // constructeur of 2 parametres
int size();
int capacity();

};

#endif
度娘说超出字数了。。。不知道图片能不能看清,这是我在类外的函数定义。

你只有Vector类的声明,没有实现阿。

-----

g++ -o exo3 fonction_exo3.o exo3.o

你需要把实现链接起来:
g++ Vector.cpp
g++ -o exo3 fonction_exo3.o exo3.o Vector.o追问

  Vector.h是我的头文件,里面有定义一个Vector类。

  fonction_exo3.cxx是我所有类外函数的定义。

  exo3.cxx是我的主程序,里面有定义对象,并且调用对象的成员函数。(应该就是类的实现)

  还有一个makefile是这样的

  然后我的主程序是这样的:

  

追答

exo3.cxx里还是没看到Vector类的实现啊,光有声明和调用没实现你让程序去哪里执行

如果我理解你的意思是只想用标准的STL的std::vector而不是自己的Vector类,那你只要include 就可以了,STL的vector实现在标准库里面,默认会自动链接进你的程序, 声明在头文件里已经包括了。你自己写了一大段Vector的声明误导大家阿...

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-26
Vector 是C++标准程序库中的一个类,如果你只需要使用自己定义的Vector类,最好用#include "vector.h",而不要用#include <vector>,否则会引用到标准程序库中的Vector,而不是你自定义的类,最好是换个头类名,不要和标准库类同名,挺麻烦的。追问

我可能还没搞懂Vector这个类,意思是这样加了#include 在头文件中,我们就不需要再在头文件中声明一个vector类了吗,就可以直接在main.cxx主文件中直接定义一个vector对象,所有的类函数类似size()也都可以直接使用了?
那头文件中加入了#include 后,还需要做什么呢?因为头文件中不就是放类的声明的吗?

追答

是的,Vectort类是一个模板类,你如果在main.cxx中添加了#include 文,就可以直接在main.cxx主文件中直接定义一个vector对象,所有的类函数也可以直接用,不需要再在自己的头文件里重新定义一个Vector类,除非你想自己写一个Vector,如果这样的话,你就要用和标准库不一样的命名空间区分开, namespace yourstd{.……}

本回答被提问者采纳
第2个回答  2014-03-26
没看到函数申明啊
第3个回答  2014-03-26
Vector只有头文件吗??其实现呢?Vector.cpp之类的文件怎么没有见到啊??
相似回答