b*****d 发帖数: 7166 | 1 我用visual studio编译c++ solution, 内有多个project。
Project A:
a.h: 里面declare 一个template class, 比如叫做 ATC
a.cpp: 里面是template class具体的定义, 比如 ATC
Project B:
b.cpp: 这里要具体用到template class ATC的一个函数, 比如
ATC* e;
e->function()
在b.cpp 的开头 #include "xxx/a.h"
这时候编译产生
error LNK2019: unresolved external symbol ATC->function()
我的发现:
1. 同样的应用e->function(),在Project A中没有问题, 为什么在project B中不行?
2. 试过在a.cpp 里加一行 template class ATC; 不行,还是LNK2019
3. 试过dynamic_cast(ATC),不行还是LNK2019
4. 不能修改Project A,比如吧a.cpp的定义部分挪到a.h,不允许
5. 看了Project B的dependency, reference, 都有project A, 而且build 顺序是先
build project A.
6. 最后发现,在b.cpp 开头#include “a.cpp”; 编译就可以通过了。
但是我担心在project B里include cpp文件会在后面产生连接的问题。
请问 为什么project B里include a.h不行,但是在project A中可以?
include cpp 可以吗?谢谢。 |