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

有三个文件,一个主程序main.cxx,一个function.cxx,还有一个头文件vector.h没办法都复制上来,超出字数了。网上看到很多情况是main和functi... 有三个文件,一个主程序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
度娘说超出字数了。。。不知道图片能不能看清,这是我在类外的函数定义。
展开
 我来答
silmerusse
推荐于2017-11-26 · TA获得超过6639个赞
知道大有可为答主
回答量:2919
采纳率:33%
帮助的人:2067万
展开全部
你只有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的声明误导大家阿...
对床话雨
2014-03-26 · TA获得超过1636个赞
知道小有建树答主
回答量:171
采纳率:100%
帮助的人:150万
展开全部
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{.……}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
依稀红颜落
2014-03-26 · TA获得超过203个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:126万
展开全部
没看到函数申明啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
松甜恬0Je4ba
2014-03-26 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3313万
展开全部
Vector只有头文件吗??其实现呢?Vector.cpp之类的文件怎么没有见到啊??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式