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
度娘说超出字数了。。。不知道图片能不能看清,这是我在类外的函数定义。 展开
没办法都复制上来,超出字数了。
网上看到很多情况是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
度娘说超出字数了。。。不知道图片能不能看清,这是我在类外的函数定义。 展开
4个回答
展开全部
你只有Vector类的声明,没有实现阿。
-----
g++ -o exo3 fonction_exo3.o exo3.o
你需要把实现链接起来:
g++ Vector.cpp
g++ -o exo3 fonction_exo3.o exo3.o Vector.o
-----
g++ -o exo3 fonction_exo3.o exo3.o
你需要把实现链接起来:
g++ Vector.cpp
g++ -o exo3 fonction_exo3.o exo3.o Vector.o
追问
追答
exo3.cxx里还是没看到Vector类的实现啊,光有声明和调用没实现你让程序去哪里执行
如果我理解你的意思是只想用标准的STL的std::vector而不是自己的Vector类,那你只要include 就可以了,STL的vector实现在标准库里面,默认会自动链接进你的程序, 声明在头文件里已经包括了。你自己写了一大段Vector的声明误导大家阿...
展开全部
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{.……}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没看到函数申明啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Vector只有头文件吗??其实现呢?Vector.cpp之类的文件怎么没有见到啊??
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询