【问题标题】:Having template function defination in cpp file - Not work for VC6在 cpp 文件中有模板函数定义 - 不适用于 VC6
【发布时间】: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++


【解决方案1】:

使用解决的问题

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

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

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

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多