C ++对模板类的未定义引用

时间:2019-05-03 12:55:24

标签: c++ templates inheritance reference undefined

我必须创建一个模板类,该类将存储3种类型的od指针,但是每种类型的方法有点不同(例如,每种类型需要不同的类型,并且方法addElement中的参数数量要比其他类型少),存储在向量中的指针。 我的解决方案是使用病毒方法为每种类型编写派生类。

我收到一个错误: g ++ -o程序main.o complexNumber.o complexVariable.o operator.o storage.o storage.o:在函数NumStorage::NumStorage()': storage.cpp:(.text+0x14): undefined reference to storage :: storage()'中 collect2:错误:ld返回1退出状态 makefile:4:目标“程序”的配方失败

#include <iostream>
#include <string.h>
#include <vector>

#include "complexVariable.h"
#include "complexNumber.h"
#include "operator.h"
#include "storage.h"
#include "functions.h"



using namespace std;

int main(){

  storage<complex> a();

  return 0;
}
#ifndef STORAGE_H
#define STORAGE_H

#include <iostream>
#include <vector>
#include <string.h>


#include "operator.h"
#include "complexNumber.h"
#include "complexNumber.h"

using namespace std;


template <class T>
class storage{
protected:
  vector<T> data;
public:
  storage();
  void addElement();
  void deleteElement(int number);
  int size();
  void replaceElement();

};


class NumStorage: public storage<complexNumber*>{

public:
  NumStorage();
  void addElement(float real, float imaginary);
};




#endif
#include <iostream>
#include <vector>

#include "storage.h"
#include "operator.h"
#include "complexNumber.h"
#include "complexNumber.h"

using namespace std;

template <class T>
int storage<T>::size(){
  return data.size();
}
template <class T>
void storage<T>::deleteElement(int number){
  int toDelete = number-1;
  delete data[toDelete];
  data.erase(data.begin()+toDelete);
}

NumStorage::NumStorage(){}
void NumStorage::addElement(float real, float imaginary){
  complexNumber* newItem = new complexNumber(real, imaginary);
  data.push_back(newItem);
}

我希望有类模板(这是我的任务的一部分),每个类存储不同类型的od数据。 我还尝试过使用模板特殊性,但是一种数据类型需要3个参数来添加addElement()函数,而其他数据仅需要2个。如何解决它有任何想法吗?

0 个答案:

没有答案