未定义的参考函数

时间:2017-05-18 08:12:13

标签: c++ templates error-handling

#include <iostream>
using namespace std;

void doStuff();

int main() {
    doStuff();
    return 0;
}

template<typename T>
void doStuff() {
    T k = 6;
    cout << k << endl;
} 

您好。我遇到了这个错误。每次我都会收到类似的错误,&#34;未定义参考doStuff&#34;。这个问题有解决方案吗?

2 个答案:

答案 0 :(得分:2)

doStuff()的声明表示非模板函数,定义是函数模板的定义,它们不匹配。

我想你想要的是功能模板,然后

template<typename T>
void doStuff() {
    T k = 6;
    cout << k << endl;
} 
int main() {
    doStuff<int>();
    return 0;
}

您还可以在main()之前放置声明,在main()之后放置定义。 e.g。

template<typename T>
void doStuff();
int main() {
    doStuff<int>();
    return 0;
}
template<typename T>
void doStuff() {
    T k = 6;
    cout << k << endl;
} 

请注意,您需要在调用doStuff时指定模板参数,因为它无法自动推断。

答案 1 :(得分:0)

由于它是模板函数,因此在调用函数时需要输入类型名称。

int

doStuff<int>();

char

doStuff<char>();

所以程序看起来像

#include <iostream>
using namespace std;


template<typename T>
void doStuff() {
    T k = 6;
    cout << k << endl;
}


int main() {
    doStuff<int>();
    return 0;
}