爱编程的小赵 2024-06-24 01:53 采纳率: 30.8%
浏览 4

代码报错该如何解决。


#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
//#include<iostream>
#include<stdlib.h>
//#include<string.h>
using namespace std;
namespace zcg
{
    class string
    {
   /* public:
        typedef char* iterator;*/
    public:
        void swap(string& s)
        {
            std::swap(_capacity, s._capacity);
            std::swap(_size, s._size);
            std::swap(_str, s._str);
        }
        string(const char* str = "")
            : _size(strlen(str))
            ,_capacity(_size)
        {
            _str = new char[_size+1];
            strcpy(_str, str);
        }
        string(const string& s)
            :_size(0)
            , _str(nullptr)
            , _capacity(_size)
        {
            string m(s._str);
            swap(m);
        }
        const char* c_str()const
        {
            return _str;
        }
        size_t size()const
        {
            return _size;
        }
        char* _str;
        size_t _capacity;
        size_t _size;
    };//定义完类要有;
    ostream& operator<<(ostream& out, const zcg::string& s)
    {
        for (int i = 0; i < s.size(); i++)
        {
            out << s._str[i];
        }
        return out;
    }

 
}


代码报错严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK1169 找到一个或多个多重定义的符号 6-24 D:\C++和数据结构\data-structure-and---c\6-24\x64\Debug\6-24.exe 1

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-24 01:53
    关注

    引自免费微信小程序:皆我百晓生

    这个问题是由于在编译时遇到了多重定义的问题。string 类中的 swap 方法有多个重载版本,每个版本都定义了不同的行为。

    为了解决这个问题,你需要删除多余的重载版本,并确保只有一个版本被编译器识别。以下是修改后的代码示例:

    #include<iostream>
    #include<cstring> // 增加此头文件以便使用strlen函数
    using namespace std;
    
    class string
    {
    public:
        void swap(string& s) { std::swap(_capacity, s._capacity); std::swap(_size, s._size); std::swap(_str, s._str); }
        string(const char* str = "") : _size(strlen(str)), _capacity(_size), _str(new char[_size + 1]) { strcpy(_str, str); }
        string(const string& s) : _size(0), _str(nullptr), _capacity(_size) { string m(s._str); swap(m); }
        const char* c_str() const { return _str; }
        size_t size() const { return _size; }
    private:
        size_t _capacity;
        size_t _size;
        char* _str;
    };
    
    // 用于测试的输出函数
    void test_swap()
    {
        string a("Hello");
        string b("World");
    
        cout << "Before swapping: a = " << a << ", b = " << b << endl;
    
        a.swap(b);
    
        cout << "After swapping: a = " << a << ", b = " << b << endl;
    }
    
    int main()
    {
        test_swap();
        return 0;
    }
    

    在这个修改后的版本中,我们删除了多余的重载版本,并确保只有一个版本被编译器识别。这样就可以解决多重定义的问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月24日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真