课设作业遇到的bug
代码:
// main.cpp
#include <iostream>
#include <vector>
#include "func.hpp"
using namespace std;
class A {
public:
A(int xx = 1) { x = xx;}
~A() {}
void print() { cout << x << endl; }
private:
int x;
};
int main() {
vector<A> v;
func(v);
for (int i = 0; i < v.size(); ++i) {
v[i].print();
}
return 0;
}
// func.hpp
#include <vector>
using namespace std;
// 函数模板
template<typename T>
void func(vector<T> &v) ;
// func.cpp
#include "func.hpp"
template<typename T>
void func(vector<T> &v) {
for (int i = 0; i < 10; ++i) {
T new_aaa(i);
v.push_back(new_aaa);
}
}
g++报错 :
这是因为非专用模板的实现必须对使用它的翻译单元可见。
编译器必须能够查看实现,以便为代码中的所有特化生成代码。
有两种解决方法
- 直接在主函数中 include “func.cpp”
- 将模板的实现部分写到 func.hpp 里