在同一标头中定义但在类外部的模板构造函数未识别

Isura manchanayake

我知道模板类定义应该在头文件中定义。但是,在标头中但在类外部定义的构造函数似乎没有被编译器注意到,而在类内部定义的构造函数运行良好。我是否缺少一些显而易见的东西?

这有效

#include <type_traits>
#include <iostream>

struct A {
    template<typename T, 
             typename = typename std::enable_if<std::is_integral<T>::value>::type>
    A(T t) {
        this->t = static_cast<double>(t);
    }

    double t;
};

int main() {
    A a(3);
    std::cout << a.t << '\n';
}

这不

#include <type_traits>
#include <iostream>

struct B {
    template<typename T, typename> B(T t);

    double t;
};

template<typename T, 
         typename = typename std::enable_if<std::is_integral<T>::value>::type>
B::B(T t) {
    this->t = static_cast<double>(t);
}

int main() {
    B b(3);
    std::cout << b.t << '\n';
}

error: no matching function for call to 'B::B(int)'
     B b(3);
          ^
蝴蝶

你忘了几件事。默认的模板参数应在类声明中。并且您需要在其中添加一个类型名。

#include <type_traits>
#include <iostream>

struct B {
    template<typename T, typename = typename std::enable_if<std::is_integral<T>::value>::type> B(T t);

    double t;
};

template<typename T,
    typename>
    B::B(T t) {
    this->t = static_cast<double>(t);
}

int main() {
    B b(3);
    std::cout << b.t << '\n';
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在实现标头中定义的模板化函数和类时,为什么要使用“ tpp”文件?

如何定义另一个模板类的内部模板类的构造函数?

模板类定义中的模板构造函数定义

如何在另一个类模板中定义完全专业的类的构造函数

定义类模板构造函数并提供模板参数

MSVC 无法识别继承模板类的模板类的“直接”基类构造函数

可以在同一个类中定义普通构造函数和常量构造函数吗?

标头中的静态函数定义

类模板上一个特定函数的未解析外部符号

定义一个类的构造函数

仅标头库:使用稍后在标头中定义的类

“未定义的引用”模板类的构造函数

如何在类模板之外定义类模板的构造函数模板?

构造函数只能在类外部定义

类构造函数中的“未捕获的ReferenceError:未定义”

在标头中定义全局数组的模板技巧

标头中的类的Struct函数声明和cpp中的定义。在单独的库中使用函数时的lnk2019

从同一类中的方法调用构造函数

在同一类中的in构造函数中调用Constructor

模板类的复制构造函数

专攻模板类构造函数

条件类模板构造函数

VisualC –在标头中实现的DLL类未导出

PHP:如果构造函数是在同一类中用__construct和classname定义的,该怎么办?

从同一类中的另一个构造函数访问构造函数变量

为什么必须内联在类外部(但在头文件中)定义的类成员函数?

PowerShell中的构造函数链接-调用同一类中的其他构造函数

从模板基类的模板构造函数派生

未定义对python-dev标头中的函数的引用