C++ 在自己的类中访问toString()非meber函数
访问非成员函数 除了用不同的方式编写(这个操作符)之外,我没有做过太多尝试,我想可能是用一个朋友,但我对他们不太熟悉,也不确定这是不是为了什么,我想看看其他人有什么要说的,这似乎是一件很简单的事情C++ 在自己的类中访问toString()非meber函数,c++,C++,访问非成员函数 除了用不同的方式编写(这个操作符)之外,我没有做过太多尝试,我想可能是用一个朋友,但我对他们不太熟悉,也不确定这是不是为了什么,我想看看其他人有什么要说的,这似乎是一件很简单的事情 IntSet::IntSet(int a, int b, int c, int d, int e){ this->data = new bool[this->MAXSETVAL]; insertElement(a); insertElement(b); insertElem
IntSet::IntSet(int a, int b, int c, int d, int e){
this->data = new bool[this->MAXSETVAL];
insertElement(a);
insertElement(b);
insertElement(c);
insertElement(d);
insertElement(e);
}
IntSet::~IntSet(){
}
void IntSet::insertElement(int n){ this->data[n] = true; }
void IntSet::deleteElement(int n){ this->data[n] = false; }
std::string IntSet::toString() const{
std::vector<char> vect;
vect.push_back('{');
for (int i = 0; i < getMax(); i++)
if (this->data[i] == true) {
if (i < 10){
vect.push_back(i + 48);
vect.push_back(',');
vect.push_back(' ');
}else if (i < 100){
vect.push_back((i / 10) + 48);
vect.push_back((i % 10) + 48);
vect.push_back(',');
vect.push_back(' ');
}else if (i > 100){
vect.push_back(i / 100 + 48);
vect.push_back(i % 100 / 10 + 48);
vect.push_back(i % 10 + 48);
vect.push_back(',');
vect.push_back(' ');
}
if (i + 1 == getMax())
vect.push_back('}');
}
char arr[vect.size()];
for (int i = 0; i < vect.size(); i++)
arr[i] = vect[i];
return std::string(arr);
}
bool equals(const IntSet &Set) {
// PROBLEM HERE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
std::string str = (*this)->toString();
if (str.compare(Set.toString()))
return true;
return false;
}
错误告诉您,
equals()
不是类的成员函数,因此它没有此
参数(但即使有,也使用(*此参数)->
是错误的,除非类具有重载的运算符->
,否则请改用this->
,或者在成员函数中完全忽略this->
)。也许你想把你的equals()
实现改为bool IntSet::equals(const IntSet&Set)const
。胡萝卜应该放在(*this)下面,我仔细检查了一下,我也试过这样和那样。虽然我是有意的,但还是要谢谢你!然后,我将投票结束这篇文章,因为这仅仅是一个印刷错误,除非你还有其他问题。@RemyLebeau我的意思是,与这个特定的主题无关,尽管我的toString()函数没有正确打印。。。我的意思是它是,但我有时会在结尾处得到{1,2,3}@H或其他wierd,而不是{1,2,3}。这是因为你不是空的,它终止了你构造std::string
的char[]
数组。另外,您根本不需要char[]
数组(此外,您分配它的方式是非标准的),您可以直接从std::vector
数据构造std::string
,然后您就不需要空终止符。就这点而言,您实际上也根本不需要std::vector
std::string
有自己的push_-back()
方法。
IntSet.cpp: In function ‘bool equals(const IntSet&)’:
IntSet.cpp:55:23: error: invalid use of ‘this’ in non-member function
std::string str = (*this)->toString();
^