errormessageクラスのすべての関数がmain関数で機能しているかどうかを調べようとしていますが、その問題はエラー "T" のメッセージと私は削除した機能のSICT ::にErrorMessage ::にErrorMessage(constのSICT ::にErrorMessage &)を参照しようとしていますと言っMAIN.CPPこの関数は削除された関数を参照しようとしていますが、関数はすでに削除されています
でcoutの< <の横にある "E"。
ただし、ヘッダーで削除するように既にこの関数を設定しています。このエラーがなぜ発生するのかについての考えはありますか?あなたの問題はここにある
ヘッダファイル
#ifndef SICT_ERROR_H_
#define SICT_ERROR_H_
namespace sict {
class ErrorMessage {
char* m_message;
public:
ErrorMessage(const char* errorMessage = nullptr);
ErrorMessage(const ErrorMessage& em) = delete;
ErrorMessage& operator=(const ErrorMessage& em) = delete;
virtual ~ErrorMessage();
void clear();
bool isClear() const;
void message(const char* str);
const char* message() const;
};
std::ostream& operator<<(std::ostream& ostr, ErrorMessage);
}
#endif
CPP MAIN.CPP
#include "ErrorMessage.h"
#include <iostream>
namespace sict {
ErrorMessage::ErrorMessage(const char* errorMessage) {
m_message = nullptr;
message(errorMessage);
}
void ErrorMessage::clear() {
delete[] m_message;
m_message = nullptr;
}
void ErrorMessage::message(const char* str) {
delete[] m_message;
m_message = new char[strlen(str) + 1];
strcpy(m_message, str);
}
const char* ErrorMessage::message() const {
return m_message;
}
ErrorMessage::~ErrorMessage() {
clear();
}
bool ErrorMessage::isClear() const {
if (m_message == nullptr) {
return true;
}
return false;
}
std::ostream& operator<<(std::ostream& ostr, ErrorMessage error) {
if (!(error.isClear())) {
ostr << error.message();
}
return ostr;
}
}
を提出
#include <iostream>
#include "ErrorMessage.h"
using namespace std;
using namespace sict;
int main() {
ErrorMessage T("Testing Error Message Module");
ErrorMessage e;
int ret = 0;
bool ok = true;
cout << T << endl << e << endl << "isClear(): " << (e.isClear() ? "Passed!" : "Failed!") << endl;
if (!e.isClear()) ok = false;
cout << endl;
cout << "===========| Long Message\r";
for (int i = 0; i < 10000000; i++) {
if (i % 1000000 == 0) {
cout << "*";
cout.flush();
}
e.message("Some error message that is really long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long"
" long long long long long long long long long long long long long");
}
cout << '*' << endl;
cout << e << endl << "isClear(): " << (e.isClear() ? "Failed!" : "Passed!") << endl;
if (e.isClear()) ok = false;
cout << endl;
e.message("Short Message");
cout << e << endl << e.message() << endl << "isClear(): " << (e.isClear() ? "Failed!" : "Passed!") << endl;
if (e.isClear()) ok = false;
e.clear();
cout << e << endl << "isClear(): " << (e.isClear() ? "Passed!" : "Failed!") << endl;
if (!e.isClear()) ok = false;
cout << endl;
if (ok) {
cout << "You passed all the tests!" << endl;
}
else {
cout << "You did not pass all the tests" << endl;
ret = 1;
}
return ret;
}
これは '= delete'が行うはずのものです。あなたはそれを何のために使ってみましたか?おそらく '= default'をしたかったでしょうか? –