Мне просто нужно немного помочь с этим заданием. Я должен переопределить операторы для работы со строками. Я начинаю с оператора == и объявляю его в моем заголовочном файле, однако, когда я определяю функцию в моем cpp-файле, он говорит, что он несовместим с объявленной функцией. Вероятно, это глупая ошибка, я просто не понимаю этого иногда.
файл заголовка string.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
#define NOT_FOUND -1
// C++ String class that encapsulates an ASCII C-string
class String
{
public:
// Default constructor
String();
// MUST HAVE: Copy-constructor that performs deep copy
String(const String& source);
// Init-constructor to initialize this String with a C-string
String(const char* text);
// Init constructor, allocates this String to hold the size characters
String(int size);
// Destructor
~String();
bool& compareTo(const String& cmp1);
// Assignment operator to perform deep copy
String& operator = (const String& source);
// Assignment operator to assign a C-string to this String
String& operator = (const char* text);
// Returns a reference to a single character from this String
char& operator [] (int index) const;
// Comparison operators
bool operator == (const String& compareTo) const;
файл string.cpp
#include "string.h"#include <string>
#include <sstream>
using namespace std;
// Default constructor
String::String()
{
Text = NULL;
}
// MUST HAVE: Copy-constructor that performs deep copy
String::String(const String& source)
{
Text = NULL;
// Call the assignment operator to perform deep copy
*this = source;
}
// Init-constructor to initialize this String with a C-string
String::String(const char* text)
{
Text = NULL;
// Call the assignment operator to perform deep copy
*this = text;
}
// Init constructor, allocates this String to hold the size characters
String::String(int size)
{
Text = new char[size];
}
// Destructor
String::~String()
{
delete[] Text;
}
// Assignment operator to perform deep copy
String& String::operator = (const String& source)
{
// Call the other assigment operator to perform deep copy
*this = source.Text;
return *this;
}
// Assignment operator to assign a C-string to this String
String& String::operator = (const char* text)
{
// Ddispose of old Text
delete[] Text;
// +1 accounts for NULL-terminator
int trueLength = GetLength(text) + 1;
// Dynamically allocate characters on heap
Text = new char[trueLength];
// Copy all characters from source to Text; +1 accounts for NULL-terminator
for ( int i = 0; i < trueLength; i++ )
Text[i] = text[i];
return *this;
}
***bool& String::operator ==(string cmp2)***
{
};
Ваш compareTo
декларация имеет const
в то время как определение не имеет const, это означает, что у них есть определение с другой подписью с объявлением
bool& compareTo(const String& cmp1);
^^^
bool& String::compareTo(string cmp2)
{
};
Кстати, почему ваш compareTo
вернуть bool&
?
Также следует избегать using namespace std;
в любых заголовочных файлах. увидеть почему-это-с использованием-имен-станд рассмотренный-а-плохо-практики-в-с
Других решений пока нет …