c++ - "undefined reference"到模板类函数

标签 c++

我正在为一个对象数组编写一个模板类,将其称为 arrayobjclass,它包含指向其他对象的指针,特别是我实现中的其他数组。数组也作为对象实现,称它们为 arrayclass。 寻找准备好进行最少更改的编译。

当我尝试使用以下行测试我的类(class)时,

g++ main.cpp arrayclass.cpp arrayobjclass.cpp -o arrayobj

我收到以下错误:

/tmp/ccEpROXj.o(.text+0x17c): In function `main':
: undefined reference to `arrayobjclass<arrayclass, int>::arrayobjclass(int)'
/tmp/ccEpROXj.o(.text+0x1dc): In function `main':
: undefined reference to `arrayobjclass<arrayclass, int>::addelem(arrayclass*)'
collect2: ld returned 1 exit status

我真的不明白哪里出了问题。任何帮助,将不胜感激。如果有帮助,代码的简短相关部分如下。提前致谢!

这是我的主要部分:

#include "arrayclass.h"
#include "arrayobjclass.h"
#include <iostream>

// 5 arrays of 10 maxsize each
#define MAXSIZE_array 10
#define NUMB_objs 5

using namespace std;

int main () {

    //create a simple array as an arrayclass object
    arrayclass * numbers1 = new arrayclass (MAXSIZE_array);

    //array of objects to hold pointers to simple arrays as created above
    arrayobjclass<arrayclass,int> * myobjs = new arrayobjclass<arrayclass,int> (NUMB_objs);

    //fill up the simple array
    int i;
    for (i=0; i<10; i++) {
        numbers1->addelem(i); 
    }

    //add a pointer to the simple array in my array of objects
    myobjs->addelem(numbers1);    
}

//arrayobjclass.h
//declarations of an array of pointers to objects

template <class obj, class key>
class arrayobjclass {

private:
    //obj * arrayptr;
    obj * objarray [];
    int maxsize;
    int totalelem;
public:
    arrayobjclass(int);
    bool addelem(obj *);
};

//arrayobjclass.cpp
//implementation of arrayobjclass, array of pointers to objects

#include "arrayobjclass.h"
#include "arrayclass.h"

template <class obj,class key>
arrayobjclass<obj,key>::arrayobjclass (int size){    
    maxsize=size;
    objarray = new obj[maxsize];
    totalelem = 0;
}

template <class obj, class key>
bool arrayobjclass<obj,key>::addelem (obj * newobj) {   
    if (totalelem < maxsize ) {
        objarray[totalelem] = newobj;
        totalelem ++;
        return true;
    }
    return false;
}

//arrayclass.h

class arrayclass {

private:
    int * arrayptr;
    int maxsize;
    int totalelem;
public:
    arrayclass(int);
    bool addelem(int);
};

//arrayclass.cpp

#include "arrayclass.h"

arrayclass::arrayclass (int size){   
    maxsize=size;
    arrayptr = new int[maxsize];
    totalelem = 0;
}

bool arrayclass::addelem (int addval) {    
    if (totalelem < maxsize ) {
        arrayptr[totalelem] = addval;
        totalelem ++;
        return true;
    }
    return false;
}

最佳答案

你不能像那样将模板声明放在 .cpp 文件中。模板声明和实现需要在同一个翻译单元中可见。将模板实现放在您直接#include 的 header 中。

关于c++ - "undefined reference"到模板类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4368440/

相关文章:

c++ - Qt GUI 应用程序在与 gui 交互时停止实时进程

c++ - 尝试创建 Qt 4.7 QStrings,填充到指针数组中

c++ - 如何在函数中创建局部变量?

c++ - 当 short int[] 自动转换为 long int[] 时会发生什么?

c++ - boost::ireplace 是否可以像基本字符一样对待特殊字符? (例如 'ź' 为 'z' )

c++ - 链接列表中的虚函数 - 多个返回类型(对象)

c++ - 连续固定长度子序列的最大差异

Python Web 浏览器引擎

c++ - 在带有WM_COPYDATA消息的结构中使用LPCTSTR是否安全?

c++ - 转换为 const int