首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >编译期间出现无法识别的引用错误

编译期间出现无法识别的引用错误
EN

Stack Overflow用户
提问于 2013-03-21 18:42:09
回答 2查看 1.3K关注 0票数 1

我正在编写一个实现双向链表的程序。我的问题是,当我通过发出以下命令编译if时

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g++ -g -Wall DynamicSequenceVector.cpp DynamicSequenceVector.h main.cpp 

我收到以下控制台输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/tmp/cc6P5VZK.o: In function `main':
main.cpp:(.text+0x1a): undefined reference to `DynamicNode::DynamicSequenceVector<int>::DynamicSequenceVector(int)'
main.cpp:(.text+0x3a): undefined reference to `DynamicNode::DynamicSequenceVector<int>::~DynamicSequenceVector()'
main.cpp:(.text+0x4f): undefined reference to `DynamicNode::DynamicSequenceVector<int>::~DynamicSequenceVector()'
collect2: error: ld returned 1 exit status

我感觉这是我在main.cpp中导入文件的方式的问题,因为如果我将main函数移到DyanmicSequenceVector.cpp文件中,它会编译得很好。此外,只有在使用参数构造新对象时,我才会收到这些编译错误。

DynamicSequenceVector.h

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef __DYNAMIC_VECTOR
#define __DYNAMIC_VECTOR

namespace DynamicNode {

template <class Type>
class DynamicSequenceVector {
    private:
        struct dynamicNode {
            dynamicNode *previousLink;
            dynamicNode *nextLink;
            Type data;
            int position;
        };

        int nodeCount;
        int currentPosition;
        dynamicNode *headNode;
        dynamicNode *tailNode;
        dynamicNode *currentNode;
        dynamicNode *tempNode;

    public:
        DynamicSequenceVector();
        DynamicSequenceVector(Type data);
        ~DynamicSequenceVector();
        void appendNode(Type nodeData);
        void accessData(int startingPosition, int endingPosition);
};

}
#endif

DynamicSequenceVector.cpp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include "DynamicSequenceVector.h"

using namespace std;
using namespace DynamicNode;

template <typename Type>
DynamicSequenceVector<Type>::DynamicSequenceVector() {
    nodeCount       = 0;
    currentPosition = NULL;
    headNode        = NULL;
    tailNode        = NULL;
    currentNode     = NULL;
}

template <typename Type>
DynamicSequenceVector<Type>::DynamicSequenceVector(Type nodeData) {
    nodeCount              = 1;
    currentPosition        = 0;
    headNode               = new dynamicNode;
    headNode->previousLink = NULL;
    headNode->nextLink     = NULL;
    headNode->data         = nodeData;
    headNode->position     = 0;
    currentNode            = 
}

template <typename Type>
DynamicSequenceVector<Type>::~DynamicSequenceVector() {
    while(nodeCount != 0) {
        tempNode = tailNode->previousLink;
        delete tailNode;
        tailNode = tempNode;
    }
    return;
}

template <typename Type>
void DynamicSequenceVector<Type>::appendNode(Type nodeData) {
    if (currentPosition == 0) {
        headNode               = new dynamicNode;
        headNode->data         = nodeData;
        headNode->position     = 0;
        headNode->previousLink = NULL;
        headNode->nextLink     = NULL;
    } else {
        tempNode               = new dynamicNode;
        tempNode->data         = nodeData;
        tempNode->previousLink = tailNode;
        tempNode->position     = nodeCount + 1;
        tailNode->nextLink     = tempNode;
        tailNode               = tempNode;
    }

    nodeCount++;
}

template <typename Type>
void DynamicSequenceVector<Type>::accessData(int startingPosition, 
        int endingPosition) {
    cout << "Data accessed";
    return 0;
}

main.cpp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include "DynamicSequenceVector.h"

//using namespace std;
using namespace DynamicNode;

int main() {
    DynamicSequenceVector<int> test();
    DynamicSequenceVector<int> testingVector(5); // gives an error
    //test = new DynamicSequenceVector<char>::DynamicSequenceVector();

    std::cout << "Hello world!\n";
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-21 18:45:12

模板成员的实现必须在标头中,而不是在单独的.cpp文件中。

编译main.cpp时,编译器需要使实现可见,以便实例化DynamicSequenceVector<int>,但这些实现不可用。因此,编译器假设模板实例化在另一个编译单元中可用,但事实并非如此,这就是链接器失败的原因。

( DynamicSequenceVector.cpp文件在这里甚至没有做任何有用的事情--未实例化的模板成员实际上从未写出到对象文件中,因为这没有任何意义。将内容移到头文件中,然后删除.cpp文件是解决此问题的正确方法。)

或者,您可以将此代码添加到DynamicSequenceVector.cpp的底部:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template class DynamicSequenceVector<int>;

这将指示编译器实例化该版本的模板类,并使其在该编译单元中可用以及从该编译单元中导出。然后,当链接器在main的编译单元中解析符号时,它将能够找到它们。

但是,这意味着您需要维护此模板类的每个实例化的集中列表。这是大量的工作,通常被认为是一个坏主意。

票数 3
EN

Stack Overflow用户

发布于 2013-03-21 18:45:40

您不能在cpp中使用模板化代码实现,因为main只知道h文件..您应该将模板化的实现移到h文件中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15555610

复制
相关文章
JQuery Div scrollTop ScrollHeight
jQuery 里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop、scrollLeft、scrollHeight。其中 scrollHeight 属性,互联网上几乎搜素不到关于它的应用技巧,而我正好需要用到它。
全栈程序员站长
2022/09/15
2.8K0
获取页面滚动距离pageYOffset、scrollY、scrollTop
在获取页面滚动距离的高度时候,往往有不同的获取方式,而且不同的属性浏览器支持稍有差别:
用户1349575
2022/02/13
3.8K0
html 滚动条 scrolltop scrollheight,浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight…
浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight
全栈程序员站长
2022/09/15
2.3K0
html 滚动条 scrolltop scrollheight,浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight…
滚动条三要素scrollTop clientHeight scrollHeight
插件 https://github.com/inuyaksa/jquery.nicescroll
全栈程序员站长
2022/09/15
1.3K0
jQuery第二十一篇 scrollTop
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin: 0; padding: 0; } .scroll{ width: 100px; height: 200px; border: 1p
贵哥的编程之路
2020/10/28
2910
jQuery scroll(滚动)延迟加载
延迟加载 $(window).scroll(function(){ var scrollHeight = $(document).height(); //文档高度 var scrollTop = $(this).scrollTop(); //滚动条卷去高度 var windowHeight = $(this).height(); // 窗口高度 // console.log(scrollHeight, scrollTop, windowHeight) if(scrol
deepcc
2018/05/16
9.1K0
liMarquee – jQuery无缝滚动插件
liMarquee 是一款基于 jQuery 的无缝滚动插件,类似于 HTML 的 marquee 标签,但比 marquee 更强大。它可以应用于任何 Web 元素,包括文字、图像、表格、表单等元素,同时它可以设置不同的滚动方向(左右上下)、滚动速度、鼠标悬停暂停、鼠标拖动、加载 xml 文件等等。
kirin
2021/01/29
8.9K0
jquery横向滚动条
此代码献给wendy 由于工作太忙,下次再整理成插件调用,先记录下来,欢迎同学们提意见。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" conten
deepcc
2018/05/16
7K0
jquery 页面滚动事件 scroll()
在没有任何元素的情况下,document的宽高是与window的宽高一致的,那么如果给document加入一些元素呢?
Devops海洋的渔夫
2019/06/02
10.1K0
jquery无缝隙连续滚动代码
通常我们在做网页布局的时候,客户为要求在某个地方实现图片滚动或文字滚动的展示,这就是所谓的跑马灯效果,在以前蓝叶用html标签marquee来做跑马灯效果,marquee不是很完美,如果一个层的宽度或高度过长,那么中间会用空隙显得很不美观;现在蓝叶用jquery无缝隙连续滚动代码来实现跑马灯效果,这段jquery无缝隙连续滚动代码可以自由设置,向左、向右、向上、向下的滚动效果,如果你需要就把以下代码复制到你需要的地方,稍微进行修改即可使用了,这是一段jquery代码,需要jquery库的支持才行。
李维亮
2021/07/09
6.8K0
jquery.countup实现数字滚动
效果图 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compa
明知山
2020/09/03
5.4K0
SCrollTOP scrollHeight
jQuery 里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop、scrollLeft、scrollHeight。其中 scrollHeight 属性,互联网上几乎搜素不到关于它的应用技巧,而我正好需要用到它。
全栈程序员站长
2022/09/15
2.3K0
SCrollTOP scrollHeight
jQuery实现消息滚动播放的效果
场景需求: 在大屏幕上,消息会进行一个实时滚动播报的效果,将现有的内容进行一个来回滚动的播放~~
王小婷
2021/04/04
4.9K0
jquery 滚轮插件 示例 - 整屏滚动
要做出这个效果,其实不用说,首先要把这五个div的基本HTML+CSS给写出来先。
Devops海洋的渔夫
2019/05/30
4.6K0
jQuery滚动到页面指定位置
        在前端的页面开发中,经常会碰到页面跳转问题,这个跳转指的是页面内部跳转到指定位置,通常是在有滚动条的情况下,网上介绍的方法很多,本文主要是介绍jQuery函数中的一个小trick,.focus()函数。
Tyan
2022/05/09
7K0
jQuery滚动到页面指定位置
jQuery 尺寸、位置操作
​ jQuery中分别为我们提供了两套快速获取和设置元素尺寸和位置的API,方便易用,内容如下。
梨涡浅笑
2022/05/08
1.1K0
jQuery 尺寸、位置操作
scrollTop()方法
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说scrollTop()方法,希望能够帮助大家进步!!!
Java架构师必看
2022/09/26
1.3K0
scrollTop()方法
Vue 滚动条定位问题
作者:matrix 被围观: 9,147 次 发布时间:2018-06-28 分类:零零星星 | 3 条评论 »
HHTjim 部落格
2022/09/26
9110
Vue 滚动条定位问题
scrollIntoView()方法导致整个页面产生偏移
今天在做页面UI改版的时候发现,我之前使用的是dom.scrollIntoView(); 使得点击右侧题目编号的时候,让左侧题目滚动到页面可视区域。
Daotin
2021/01/21
4.3K0
js常用事件整理—兼容所有浏览器
1.鼠标滚动事件。 说明:返回值 大于0向上滚动,小于0向下滚动。 兼容型:所有浏览器。 代码: /*********************** * 函数:鼠标滚动方向 * 参数:event * 返回:滚轮方向[向上(大于0)、向下(小于0)] *************************/ var scrollFunc = function(e) { var direct = 0; e = e || window.event; if (e.wheelDelta) {//
磊哥
2018/05/08
2.2K0

相似问题

jQuery滚动过远

10

ScrollTop - jQuery不滚动

21

jQuery scrollTop不滚动

40

jQuery .scrollTop没有正确滚动

20

jQuery - scrollTop命令未滚动

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文