加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C类模板未定义函数引用

发布时间:2020-12-16 04:53:07 所属栏目:百科 来源:网络整理
导读:参见英文答案 undefined reference to template function 2个 当我在我的main函数中调用模板类“add”和“greater”中的两个函数时,我一直得到未定义的引用. 所以我有: number.h #ifndef NUMBER_H#define NUMBER_Htemplate class Tclass number {public: T
参见英文答案 > undefined reference to template function 2个
当我在我的main函数中调用模板类“add”和“greater”中的两个函数时,我一直得到未定义的引用.

所以我有:
number.h

#ifndef NUMBER_H
#define NUMBER_H

template <class T>
class number {
public:
    T x;
    T y;

    number (int a,int b){
        x=a; y=b;}
    int add (T&);
    T greater ();
};

#endif

number.cpp

#include "number.h"

template <class T>
int number<T>::add (T& rezAdd){
    rezAdd = x+y;
    return 1;
}

template <class T>
T number<T>::greater (){
        return x>y? x : y;
}

我的主文件是:resolver.cpp

#include <stdio.h>
#include <stdlib.h>
#include "number.h"

int main (int argc,char **argv) {
    int aux;
    number<int> c(3,5);

    c.add(aux);
    printf ("number added [%d]n",c.add(aux));
    printf ("greater number: [%d]n",c.greater());

    return 0;
}

我不断得到的错误是:

g++ -Wall -o tema1 resolver.cpp number.cpp
/tmp/ccX483J4.o: In function `main':
resolver.cpp:(.text+0x34): undefined reference to `number<int>::add(int&)'
resolver.cpp:(.text+0x47): undefined reference to `number<int>::add(int&)'
resolver.cpp:(.text+0x64): undefined reference to `number<int>::greater()'
collect2: ld returned 1 exit status
make: *** [all] Error 1

我在这里先向您的帮助表示感谢!

解决方法

你的课名错了.您的类名为cai,其中所有函数都属于名为number的类: http://ideone.com/ZayX0c

还有一件事……你不能在.cpp文件中有模板.模板函数/定义与类声明一起进入标题.这是您的未定义函数错误的原因.非模板函数放在.cpp中.

#include <cstdio>
#include <cstdlib>

template <class T>
class number {
public:
    T x;
    T y;

    number (int a,int b){
        x=a; y=b;}
    int add (T&);
    T greater ();
};

template <class T>
int number<T>::add (T& rezAdd){
    rezAdd = x+y;
    return 1;
}

template <class T>
T number<T>::greater (){
        return x>y? x : y;
}


int main (int argc,c.greater());

    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读