我需要做一些逻辑比较并返回一个布尔答案。
以下是.cpp文件中的代码:
bool MyString::operator==(const MyString& other)const
{
if(other.Size == this.Size)
{
for(int i = 0; i < this.Size+1; i++)
{
if(this[i] == other[i])
return true;
}
}
else
return false;
}
以下是从main.cpp文件中调用的内容:
if (String1 == String4)
{
String3.Print ();
}
else
{
String4.Print ();
}
以下是编译错误:
error: request for member `Size` in `this`, which is of non-class type `const MyString* const`
error: no match for `operator[]` in `other[i]`
答案 0 :(得分:4)
this
是一个指针,因此你必须取消引用它:
this->Size;
此外,我认为你operator==
的逻辑存在缺陷 - 在这里,如果任何字符等于第二个字符串中相同位置的字符,则返回true
。将你的循环改为
for(int i = 0; i < this->Size+1; i++)
{
if(this[i] != other[i])
return false;
}
并放置return true;
而不是代码的最后一部分(else
子句)来比较整个字符串。
正如Seth所提到的,你不能在operator[]
上使用this
,因为它被视为数组(即this[i]
真的是*(this + i)
- 所以不是什么你在想它是。请改为访问内部存储成员。
答案 1 :(得分:2)
代码问题:
this[i]
:你显然想在这里访问字符串的第i个字符。这不是那样做的。假设您的班级超载operator[]
,您需要(*this)[i]
。或者,您可以直接访问字符串的内部表示。
if(this[i] == other[i]) return true;
:想一想比较字符串“A1”和“AB”的含义。
for () {...}
:退出循环后会发生什么?如果比较设法通过循环而不返回,则需要返回一些内容。
答案 2 :(得分:0)
您尚未指定是否可以使用C ++标准算法。
在这里,您使用手写循环和std::equal
算法说明了两个版本:
//#define USE_STD_ALGORITHM 1 // uncomment to enable std::equal version
#include <cassert>
#include <algorithm>
#include <stdexcept>
// NOTE: partial simplest definition for the test and presentation purposes only.
struct MyString
{
MyString(char const* s, std::size_t size) : data(s), Size(size) {}
char const& operator[](std::size_t index) const;
bool operator==(const MyString& other) const;
private:
char const* data;
std::size_t Size;
};
char const& MyString::operator[](std::size_t index) const
{
if (index < Size)
return data[index];
throw std::out_of_range("index invalid");
}
bool MyString::operator==(const MyString& other) const
{
if (this->Size == other.Size)
{
#ifdef USE_STD_ALGORITHM
return std::equal(data, data+Size, other.data);
#else
bool equal = true;
for(std::size_t i = 0; i < this->Size; ++i)
{
if((*this)[i] != other[i])
{
equal = false;
break;
}
}
return equal;
#endif
}
return false;
}
int main()
{
char const* a = "abc";
char const* b = "abc";
MyString sa(a, 3);
MyString sb(b, 3);
assert(sa == sb);
char const* c = "adc";
MyString sc(c, 3);
assert(!(sa == sc));
char const* d = "ab";
MyString sd(d, 2);
assert(!(sa == sd));
}
祝你好运!