Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在自己的类中访问toString()非meber函数_C++ - Fatal编程技术网

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();
                   ^