【问题标题】:How to make the compiler aware of templated struct? [duplicate]如何让编译器知道模板结构? [复制]
【发布时间】:2023-03-03 15:17:01
【问题描述】:

我正在尝试实现answer given on my question over at CodeReview.SE。基本上,我想访问模板结构中的一些静态变量。考虑以下示例代码:

#include <iostream>
using namespace std;

template<const int idx>
struct Data{
    static int bar;
};

template<const int idx>
int getBar(){
    return Data<idx>::bar;
}

int main() {
    const int n = 2; // Arbitrary number
    cout << getBar<n>();
    return 0;
}

编译器无法识别我希望在程序中使用Data&lt;n&gt; - 但是,它可以很好地识别初始的getBar&lt;n&gt; 函数,从错误消息中可以看出:

undefined reference to `Data<2>::bar'

我如何告诉编译器使模板结构也可用?

【问题讨论】:

    标签: c++ templates template-meta-programming


    【解决方案1】:

    必须给静态类变量分配内存。添加这个:

    template<const int idx>
    int Data<idx>::bar = 0;
    

    Demo

    编辑:由 NathanOliver 链接的骗子击中了它的头部,但对于非模板类。此答案显示了模板化类时的语法。细微的差别,但仍然有用。

    【讨论】:

    • 谢谢 - 我不会从标记为欺骗的问题中得到这个。
    猜你喜欢
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多