【发布时间】:2010-04-29 02:20:15
【问题描述】:
我有以下源代码:
// main.cpp
#include "a.h"
int main() {
A::push(100);
}
// a.cpp
#include "a.h"
template <class T>
void A::push(T t) {
}
template void A::push(int t);
// a.h
#ifndef A_H
class A {
public:
template <class T>
static void push(T t);
};
#endif
VC2008下编译出来的代码很漂亮,没有问题。
但是当来到我心爱的 VC6 时,它给了我错误:
main.obj:错误 LNK2001:未解决 外部符号“公共:静态无效 __cdecl A::push(int)" (?push@A@@SAXH@Z)
有什么解决方法吗?我只是想确保我的函数定义在 cpp 文件中。
【问题讨论】:
-
嗯。有了VC2008,为什么还要用VC6?这是一个巨大的倒退。 VC6 很有可能会失败,因为它不像 VC2008 那样符合标准。 VC6 在这一点上相当古老。您必须将它用于旧计算机或其他东西吗?
-
从 VC6 迁移不是一种选择,因为基于遗留代码的代码严重依赖第三方 VC6 库。
-
我同意乔纳森的观点。如果您想要具有相同旧功能的现代支持,请确保在没有托管代码的情况下编译您的程序(关闭公共语言运行时 (CLR) 支持)。当然,这意味着没有垃圾收集、.NET 等,就像在 VC6 中一样,它没有内置这些东西。
标签: c++ visual-c++