c++ - 声明不兼容,初学者 c++

标签 c++ string.h

我只需要一点帮助来完成这项作业。我必须重新定义运算符才能处理字符串。我从 == 运算符开始,我在我的头文件中声明了它,但是当我去定义我的 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;。见why-is-using-namespace-std-considered-a-bad-practice-in-c

关于c++ - 声明不兼容,初学者 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844286/

相关文章:

c++ - 三向比较运算符总是有效的吗?

c - 如何将字符数组输入标记为字符和字符串?

c++ - 为什么这是 gcc 中的 "overloading ambiguity"?

c++ - Intel 64(EM64T)系统上char类型的大小

在运行时定义的 C++ 全局 extern 常量可跨多个源文件使用

c - 对 `strnstr' 的 undefined reference 如何修复它并运行 strnstr

c - #include <string.h> -> 中止陷阱 : 6?

c++ - 访问 vector 的元素

c - ANSI C strstr() 不使用指针

C:简单的 CSV 读取器/写入器 - 无限循环行为