严重性 代码 说明 项目 文件 行 禁止显示状态错误 C2679 二元“<<”: 没有找到接受“MyString”类型的右操作数的运算符(或没有可接受的转换) day04_240514 F:\VS\

MyString.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class MyString
{
public:
	MyString();
	MyString(int len);
	MyString(const char* str);
	MyString(const MyString& another);
	~MyString();

	//重载操作符[] << >> == != =
	friend ostream& operator<<(ostream& os, MyString& s);
	char& operator[](int index);
	MyString& operator=(const MyString& another);
	friend istream& operator>>(istream& is, MyString& s);

	MyString operator+(MyString& another);


private:
	int len;
	char* str;
};
MyString.cpp

#include "MyString.h"

MyString::MyString()
{
	this->len = 0;
	this->str = NULL;//NULL等价于'\0'
}
MyString::MyString(int len)
{
	
}
MyString::MyString(const char* str)
{
	if (str == NULL)
	{
		this->len = 0;
		this->str = new char[0 + 1];
		strcpy(this->str, "");//开辟一个空字符串
	}
	else
	{
		int len = strlen(str);
		this->len = len;
		this->str = new char[len + 1];
		strcpy(this->str, str);
	}
}
MyString::MyString(const MyString& another)
{
	this->len = another.len;
	this->str = new char[this->len + 1];
	strcpy(this->str, another.str);
}
MyString::~MyString()
{
	if (this->str)
	{
		cout << "~MyString()..." << endl;
		delete this->str;
		this->str = NULL;
		this->len = 0;
	}
}

char& MyString::operator[](int index)
{
	return this->str[index];
}

MyString& MyString::operator=(const MyString& another)
{
	if (this == &another)
	{
		return *this;
	}

	if (this->str)
	{
		delete[] this->str;
		this->str = NULL;
		this -> len = 0;
	}

	this->len = another.len;
	this->str = new char[this->len + 1];
	strcpy(this->str, another.str);

	return *this;
}

ostream& operator<<(ostream& os, MyString& s)
{
	os << s.str;
	return os;
}

istream& operator>>(istream& is, MyString& s)
{
	//1、将之前的字符串释放掉
	if (s.str)
	{
		delete[] s.str;
		s.str = NULL;
		s.len = 0;
	}

	char temp_str[4096] = { 0 };
	//2、通过cin开辟添加新的字符串
	cin >> temp_str;
	int len = strlen(temp_str);
	s.str = new char[len + 1];
	strcpy(s.str, temp_str);
	s.len = len;

	return is;
}

MyString MyString::operator+(MyString& another)
{
	MyString temp;
	int len = this->len + another.len;
	temp.len = len;
	temp.str = new char[len + 1];//开辟空间了,里面内容未知
	memset(temp.str, 0, len + 1);
	strcat(temp.str, this->str);
	strcat(temp.str, another.str);

	return temp;

}
main.cpp

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include"MyString.h"
using namespace std;

int main(void)
{


	MyString s1("abc");
	MyString s2("123");
	cout << (s1 + s2) << endl;//仿照string,(s1 + s2)应该返回一个MyString 匿名对象//?????????
	//cout << s1 + s2 << endl;
	cout << s1 << endl;
	cout << s2 << endl;

	return 0;
}

为什么52行代码显示C2679和E0349不对呢???????????????????????????(自定义了一个Mystring类,用法仿照string类,操作符 << 和 + 也已经声明和定义)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这个错误提示告诉我们在程序中使用了"string",但是编译器无法在"std"命名空间中找到它。可能是您忘记了包含头文件,或者有使用"std::string"这样的完全限定名称。您可以尝试在文件开头添加以下语句: ```c++ #include <string> ``` 这将包含标准库中的字符串头文件。并且在程序中使用string时,使用完全限定名称"std::string"来指定。例如: ```c++ std::string myString = "Hello World!"; ``` 这样应该可以解决这个错误。希望对您有所帮助! ### 回答2: 这个代码错误严重性是中等的。这个错误的具体说明是,'string' 不是 'std' 的成员。这个错误出现在项目名为魔兽争霸的文件warrior.h的第8。 这个错误描述了一个命名空间错误。在这个代码中,'string'被当作 'std' 的成员,但是实际上,'string'不是标准命名空间 'std' 的成员。这可能是因为程序员在代码中未正确引用命名空间 'std' 或者有包含正确的头文件。 要修复这个错误,需要在代码中添加正确的命名空间引用或者包含正确的头文件。可以将以下代码添加到warrior.h文件的顶部来引用 'std' 命名空间: ```cpp #include <string> ``` 或者,可以在代码中使用 'std::string' 替代 'string',以确保正确引用了 'std' 命名空间: ```cpp std::string myString; ``` 修复这个错误后,代码将能够正确访问 'std' 命名空间中的 'string' 成员,从而解决这个问题。 ### 回答3: 这个错误代码C2039指的是在文件"warrior.h"的第8,存在一个无效的语句"string",因为它不是命名空间"std"的成员。这个错误严重性取决于项目的重要性和影响程度。根据文件路径可以推断出,这个错误代码出现在"魔兽争霸"这个项目中,可能是在"warrior.h"这个文件中使用了错误的语句。由于有提供详细的代码内容,无法判断具体的修复方法。但是解决这个问题的一种可能方法是通过在文件中包含正确的头文件或者引入正确的命名空间来修复这个错误。另外,在项目中出现这种错误可能导致编译失败或者运错误,因此需要及时解决。希望这个回答对你有帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值