Yumi0769 2021-02-15 00:08 采纳率: 100%
浏览 122
已采纳

调用一个在动态链接库里的模板类时出现 LNK2019 错误的问题

我正在开发一个科学计算库,其中一个叫 Number 的项目是动态链接库,这个库里面有一个普通类 real 和一个模板类 complex。在另一个项目中,我调用 real 类的时候完全没问题,但是当调用 complex 类时链接器报 LNK2019。我实在看不出 real 和 complex 这两个类除了是否模板类这个区别之外的其它区别,所以问题真的出在类模板上吗?

 

下面是动态链接库 Number 项目的代码片段

number.h

#pragma once
#ifdef NUMBER_EXPORTS
#	define NUMBER_API __declspec(dllexport)
#else
#	define NUMBER_API __declspec(dllimport)
#	pragma	comment(lib, "number")
#endif // _NUMBER_EXPORTS

#include <iostream>

namespace osl {
    
    class NUMBER_API real {
		double _denominator, _numerator;
		// object_operation.cpp
		inline void simplify();

	public:
		bool known;

		// real.cpp
		inline real();
		inline real(const real& origin);
        // ...
	};

	template<class num = double>
	class NUMBER_API complex {
		num _real, _imag;

	public:
		bool known;

		// complex.cpp
		inline complex();
		inline complex(const complex& cpl);
        // ...
	};
}

real.cpp

#include "pch.h"
#include "number.h"
using std::cout;

namespace osl {
	inline real::real() :
		_denominator(1), _numerator(0), known(false)
	{}

	inline real::real(const real& origin) :
		_denominator(origin._denominator), _numerator(origin._numerator), known(origin.known)
	{}
       
    // ...
}

complex.cpp

#include "pch.h"
#include "number.h"
#include <gsl/gsl_complex_math.h>
using std::cout;

namespace osl {
	template<class num>
	inline complex<num>::complex() :
		_real(0), _imag(0), known(false)
	{}

	template<class num>
	inline complex<num>::complex(const complex& cpl) :
		_real(cpl._real), _imag(cpl._imag), known(cpl.known)
	{}
    
    // ...
}

调用 real 和 complex 类的控制台应用项目并出现问题的代码片段 (example.cpp)

#include <iostream>
#include "..\Number\number.h"
using namespace std;
using namespace osl;

int main()
{
	real hello;
	hello.console_print();
    // 下面两行引起了问题
	complex<double> cpl;
	cpl.console_print_rect();
	return 0;
}

链接器主要错误

严重性	代码	说明	项目

错误	LNK2019	无法解析的外部符号 "__declspec(dllimport) public: __cdecl osl::complex<double>::complex<double>(void)" (__imp_??0?$complex@N@osl@@QEAA@XZ),函数 main 中引用了该符号	Example

错误	LNK2019	无法解析的外部符号 "__declspec(dllimport) public: void __cdecl osl::complex<double>::console_print_rect(char const *)const " (__imp_?console_print_rect@?$complex@N@osl@@QEBAXPEBD@Z),函数 main 中引用了该符号	Example

求大佬帮帮忙 QWQ

该项目已经在 Github 和 Gitee 开源,旨在简化专业的科学计算编程,需要者自取。

https://github.com/YumiZhan/OSL

https://gitee.com/YumiZhan/OSL

  • 写回答

2条回答 默认 最新

  • SoftwareTeacher 《编程之美》作者 2021-02-15 09:25
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料