gpt4 book ai didi

c++ - 指向模板对象的指针

转载 作者:行者123 更新时间:2023-11-30 02:51:58 24 4
gpt4 key购买 nike

我无法编译...我不知道这里出了什么问题...这是发生错误的地方:

void MainThread::run()
{
Set<int>* p_test; p_test = new Set<int>;
p_test->add(new int(9));
std::cout<<"The set is: {";
for (int x = 0; x < p_test->size(); x++)
std::cout<< ", " << p_test->toString(x).toStdString().c_str();

std::cout<<"}";

std::cin.get();
}//test method

错误消息显示为:“对 Set::Set() 的 undefined reference ”,它显示在我尝试使用我的类的行中。我的类(class)自行编译...下面是文件“Set.h”。任何人都知道我该如何解决它?提前致谢。

#ifndef SET_H
#define SET_H

#include <functional>
#include <QList>
#include <QString>
#include <type_traits>
#include <exception>
#include <iostream>

template<typename T>
class Set {
public:
//constructors
Set();
~Set(){ delete []pType; }

//functions
const int & size(){ return m_size; }

void add(const T * singleton);

void empty();

//operators
inline T& operator [](int index){ return pType[index]; }

template<class Y>
friend Set<Y> operator *(const Set<Y>& s1, const Set<Y>& s2);//intersection
template<class Y>
friend Set<Y> operator *(Set<Y>& s1, Set<Y>& s2);
template<class Y>
friend Set<Y> operator +(const Set& s1, const Set& s2);//union
template<class Y>
friend Set operator -(const Set& s1, const Set& s2);//relative complement

bool operator =(const Set& other)
{
delete []pType;//empty out the array

/** Gets operator **/
int x = other.size();
pType = new T[x];
for (int y = 0; y < x; y++)
pType[y] = other[y];

m_size = x;

return true;
}

bool operator ==(const Set & other)
{
if(other.size() != size())
return false;
else
{
for (int x = 0; x < size(); x++)
if (!other.has(pType[x]))
return false;
}//end else
return true;
}//end equals operator

/*template<typename Type>
bool operator *= (const Set<Type> &lhs, const Set<Type> &rhs){
//compile time statement (just to let people know)
static_assert(std::is_same<Type1, Type2>::value, "Types are not equal!");
return std::is_same<Type1, Type2>::value;
}//operator for checking if two things are the same type */

bool operator >(const Set &other)
{ /** Superset **/ return false; }
\
bool operator <(const Set *other)
{ /** Subset **/ return false; }

Set& complement();
bool isEmpty(){ return m_size == 0; }
bool has(T* element);
QString toString(int index);

private:
T * pType;
T * m_Type; //save the variable type.
int m_size;
};

#endif // SET_H

我确实在单独的文件中定义了一个构造函数。

Set<Y>::Set()
{
m_size = 0;
m_Type = new Y();//save a default value
}//create an empty set

或者我需要一种不同类型的构造函数吗?

最佳答案

Set 类的每个方法都必须在头文件中定义。您的头文件缺少 Set::Set() 以及其他一些方法的定义。

关于c++ - 指向模板对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19352342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com