相关疑难解决方法(0)

C++模板,链接错误

我在调用模板类时遇到问题.我声明了一个新的类型名称Array,它是一个模板;

在.hpp文件中:

template <typename T>
class Array
{
public:
   Array();
};
Run Code Online (Sandbox Code Playgroud)

在.cpp文件中:

template <typename T>
Array<T>::Array()
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)

主要:

Array<int> arr;
Run Code Online (Sandbox Code Playgroud)

我得到了Linkage错误:未解析的外部符号到ctor.

任何的想法?

c++ linker templates

34
推荐指数
4
解决办法
2万
查看次数

DLL + 导出类 + 模板成员 func = 未解析的外部符号。有机会修复吗?

首先,这不是一个重复的问题,因为1)这是一个链接器问题,编译器成功通过,因为我已经显式实例化了。2)这不是关于模板类,而是模板成员函数,3)我对代码结构有一些限制,所以一些现有的技巧不适用。我在这里搜索了我的标题,前几个线程(4083239120330521253206191284887636940394)都是关于模板类,而不是模板成员函数。其他一些线程实际上正在谈论实例化失败,因此实际上是编译器问题,但我已经尝试过显式实例化并且编译已成功通过,重复一下。所以我希望你能抑制住把我的问题作为重复问题来结束的诱惑,这是我的帖子。

环境:

  • Windows 10 版本 1803
  • Visual Studio 2015 更新 3
  • 在VS中调试x64模式

来源:

有两个项目:

1) DllProject,构建为 dll,包含两个源:Dll.h 和 Dll.cpp。

DLL.h:

#pragma once

#ifdef _WINDLL
#define API_TYPE __declspec(dllexport)
#else
#define API_TYPE __declspec(dllimport)
#endif

class API_TYPE AClass {
public:
    template <class T> void Func(T& data);
    template <class T> void CallFunc(T& data) {
        Func<T>(data);
    }
};
Run Code Online (Sandbox Code Playgroud)

DLL.cpp:

#include "Dll.h"

template <class T> void AClass::Func(T& data) {
    data++;
}

template void AClass::Func<float>(float&);  //attempt to …
Run Code Online (Sandbox Code Playgroud)

c++ dll member-functions dynamic-linking template-function

6
推荐指数
1
解决办法
1440
查看次数