相关疑难解决方法(0)

为什么模板只能在头文件中实现?

引自C++标准库:教程和手册:

目前使用模板的唯一可移植方法是使用内联函数在头文件中实现它们.

为什么是这样?

(澄清:头文件不是唯一的便携式解决方案.但它们是最方便的便携式解决方案.)

c++ templates c++-faq

1660
推荐指数
14
解决办法
46万
查看次数

使用模板时,为什么会出现"未解析的外部符号"错误?

当我使用模板为类编写C++代码并在源(CPP)文件和标题(H)文件之间拆分代码时,在链接最终可执行文件时会出现大量"未解析的外部符号"错误,尽管目标文件正确构建并包含在链接中.这里发生了什么,我该如何解决?

c++ linker templates

92
推荐指数
2
解决办法
6万
查看次数

模板运算符重载函数上的未定义符号

我有此函数声明:

template<class T>
a::A& a::A::operator<<(T out) {
    std::cout << out;
    return (*this);
}
Run Code Online (Sandbox Code Playgroud)

和此函数定义:

namespace a {
    ...
    class A {
        ...
        template<class T> A& operator<<(T);
Run Code Online (Sandbox Code Playgroud)

我称之为:

a::A b;
b << 1;
Run Code Online (Sandbox Code Playgroud)

这是Makefile:

app: main.o A.o
    g++ main.o A.o -o app

main.o: main.cpp
    g++ -c main.cpp

A.o: A.cpp
    g++ -c A.cpp
Run Code Online (Sandbox Code Playgroud)

它给了我:

未定义的符号:a :: A&a :: A :: operator << <int>(int)

这是为什么?

c++ templates namespaces operator-overloading

3
推荐指数
1
解决办法
1915
查看次数