在实现文件中定义模板类的静态成员

时间:2018-10-26 11:39:13

标签: c++

我简化了这个问题。我想知道为什么它不能编译:

错误消息: <ckeditor [(ngModel)]="textdata" #myckeditor="ngModel" name="myckeditor" required [config]="ckeConfig" debounce="500"> </ckeditor>

a.h

undefined reference to 'Foo<int>::j'

a.cpp

#pragma once
template<typename T>  
class Foo{
    public:
        int bar(){
            return j;
        }
    private:
        static int j;
};

main.cpp

#include "a.h"
template<typename T>
int Foo<T>::j = 3;

1 个答案:

答案 0 :(得分:0)

模板是原因。

template<typename T>
int Foo<T>::j = 3;

无法解析main.cpp,因为它没有关于a.cpp的信息。 至于a.cpp,它不会创建Foo,因为在那里没有使用它。

要使系统正常运行,您需要添加

int Foo<int>::j = 3;

a.cpp

template<typename T>
int Foo<T>::j = 3;

main.cpp


请注意,inlineC++17关键字的新用法可能就是您要寻找的东西。