如何让编译器知道模板化结构?
How to make the compiler aware of templated struct?
我正在尝试实施 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<n>
在程序中可用 - 但是,它可以识别初始 getBar<n>
函数,从错误消息中可以明显看出:
undefined reference to `Data<2>::bar'
如何告诉编译器使模板化结构也可用?
静态class变量必须分配内存。添加:
template<const int idx>
int Data<idx>::bar = 0;
编辑:NathanOliver 链接的骗子击中了它的头,但对于非模板 classes。此答案显示了 class 模板化时的语法。细微差别,但仍然有用。
我正在尝试实施 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<n>
在程序中可用 - 但是,它可以识别初始 getBar<n>
函数,从错误消息中可以明显看出:
undefined reference to `Data<2>::bar'
如何告诉编译器使模板化结构也可用?
静态class变量必须分配内存。添加:
template<const int idx>
int Data<idx>::bar = 0;
编辑:NathanOliver 链接的骗子击中了它的头,但对于非模板 classes。此答案显示了 class 模板化时的语法。细微差别,但仍然有用。