C++ cpp文件中有模板函数定义-不适用于VC6

C++ cpp文件中有模板函数定义-不适用于VC6,c++,visual-c++,C++,Visual C++,我有以下源代码: // main.cpp #include "a.h" int main() { A::push(100); } //a.cpp #包括“a.h” 模板 空A::推(T){ } 模板void A::push(int t); //a.h #如果没有 甲级{ 公众: 模板 静态空隙推力(T); }; #恩迪夫 在VC2008下编译的代码很漂亮,没有问题 但当谈到我心爱的VC6时,它给了我错误: main.obj:错误LNK2001:未解决 外部符号“公共:静态无

我有以下源代码:

// main.cpp
#include "a.h"

int main() {
    A::push(100);
}

//a.cpp
#包括“a.h”
模板
空A::推(T){
}
模板void A::push(int t);

//a.h
#如果没有
甲级{
公众:
模板
静态空隙推力(T);
};
#恩迪夫

在VC2008下编译的代码很漂亮,没有问题

但当谈到我心爱的VC6时,它给了我错误:

main.obj:错误LNK2001:未解决 外部符号“公共:静态无效” __cdecl A::推送(int)“(?)?push@A@@SAXH@Z)


有解决办法吗?我只想确保我的函数定义被重新放在cpp文件中。

使用

// main.cpp
#include "a.h"

int main() {
    A::push<int>(100);
}
//main.cpp
#包括“a.h”
int main(){
A::推(100);
}

与VC2008相比,您似乎需要为VC6提供更多提示。

Um。当您有VC2008时,为什么要使用VC6?这是一个巨大的倒退。VC6很有可能在您身上失败,因为它不像VC2008那样符合标准。VC6在这一点上相当古老。您是否必须将其用于旧计算机或其他设备?从VC6迁移不是一个选项,因为基于旧代码的系统严重依赖于仅限VC6的第三方库。我同意Jonathan的观点。如果希望使用相同的旧功能获得现代支持,请确保在编译程序时不使用托管代码(关闭公共语言运行时(CLR)支持)。当然,这意味着没有垃圾收集,.NET等,就像VC6一样,它没有内置这些东西。
// a.h
#ifndef A_H
class A {
public:
    template <class T>
    static void push(T t);
};
#endif
// main.cpp
#include "a.h"

int main() {
    A::push<int>(100);
}