qyu21490 2021-01-08 21:07 采纳率: 66.7%
浏览 115
已采纳

C++模板类的构造函数放在类外写的话显示无法解析的符号

#pragma once
#ifndef _ARRAYLIST_
#define _ARRAYLIST_
#include<iostream>
#include <exception>

template<class T>
class ArrayList
{
private:
    T* elementData;
    int size = 0;
    int length = 0;
    T* DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
public:
   // ArrayList(int initalCapacity);
    ArrayList();
};


#endif

#include "ArrayList.h"
template<class T>
ArrayList<T>::ArrayList()
{
    this->elementData = this->DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

在调用构造函数的时候出现无法解析的符号错误

  • 写回答

2条回答 默认 最新

  • include_iostream_ 2021-01-08 23:46
    关注

    你这是把模板类的构造函数“声明和定义”分开写了?这样是不行的,因为模板类不是类,模板函数也不是函数(听起来很奇怪对吧),所以不能按类和函数那样分开写。只有经过实例化的模板类才是类,经过实例化的模板函数才是函数。C++的模板语法非常复杂,仅凭一个“模板声明”,C++编译器是无法知道它应该做什么的,这点和类和函数是非常不同的。这时最常见的选择是把模板类函数实现写到与模板类声明的同一个文件里边。

    不知道LTO(Linkage Time Optimization,链接时优化)或者微软的全局优化能不能在不必放进同一个文件的情况下成功编译,也可以先试试。具体方法是资源管理器右键项目,选属性,具体位置有点不记得但总之C++高级设置和链接器设置里分别有一个“全程序优化”,把这玩意打开(只打开二者之一的话可能没啥用)。

    如果你是命令行用户,使用/GL选项:https://docs.microsoft.com/zh-cn/cpp/build/reference/gl-whole-program-optimization?view=msvc-160

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探