鱼C论坛

 找回密码
 立即注册
查看: 82|回复: 1

[已解决]类模板编译报错

[复制链接]
发表于 2024-7-21 17:50:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为啥报错?
template <class T>
class Vector
{
private:
    int len;
    T items;

public:
    Vector(int size = 10):len(size)
    {
        items = new T[len];
    }
    ~Vector() 
    {
        delete[] items;
        items = NULL;
    };
    void resize(int size)
    {
        if (size <= len)
        {
            return;
        }
        T* tmp = new T[size];
        for (size_t i = 0; i <len ; i++)
        {
            tmp[i] = items[i];
        }
        delete[] items;
        items = tmp;
        tmp = NULL;
        len = size;
    }
    int size()
    {
        return len;
    }
    T& operator[](int i)
    {
        if (i > len)
        {
            resize(i + 1);
        }
        return items[i];
    }
    const T& operator[](int i)const
    {
        return items[i];
    }
};



int main()
{
    Vector<std::string> a(10);
    a[0] = "哈哈";
    a[1] = "哈哈1";
    a[2] = "哈哈2";
    a[3] = "哈哈3";
    a[4] = "哈哈4";
    for (size_t i = 0; i < a.size(); i++)
    {
        std::cout << a[i];
    }

}
生成开始于 17:50...
1>------ 已启动生成: 项目: 模板示例:数组, 配置: Debug x64 ------
1>模板示例:数组.cpp
1>C:\Users\Administrator\source\repos\模板示例:数组\模板示例:数组\模板示例:数组.cpp(69,23): error C2440: “return”: 无法从“char”转换为“T &”
1>C:\Users\Administrator\source\repos\模板示例:数组\模板示例:数组\模板示例:数组.cpp(69,23): error C2440:         with
1>C:\Users\Administrator\source\repos\模板示例:数组\模板示例:数组\模板示例:数组.cpp(69,23): error C2440:         [
1>C:\Users\Administrator\source\repos\模板示例:数组\模板示例:数组\模板示例:数组.cpp(69,23): error C2440:             T=std::string
1>C:\Users\Administrator\source\repos\模板示例:数组\模板示例:数组\模板示例:数组.cpp(69,23): error C2440:         ]
1>已完成生成项目“模板示例:数组.vcxproj”的操作 - 失败。
========== 生成: 0 成功,1 失败,0 最新,0 已跳过 ==========
========== 生成 于 17:50 完成,耗时 01.179 秒 ==========
最佳答案
2024-7-21 18:09:04
#include <iostream>

template<class T> class Vector {
private:
    size_t len;
    T *items;

public:
    Vector(size_t size = 10): len(size), items(new T[len]) {}
    ~Vector() {delete[] items;};
    void resize(size_t size) {
        if(size <= len) return;
        T *tmp = new T[size];
        for(size_t i = 0; i < len; i++) {
            tmp[i] = items[i];
        }
        delete[] items;
        items = tmp;
        len = size;
    }
    size_t size() {return len;}
    T &operator[](size_t i) {
        if(i > len) resize(i + 1);
        return items[i];
    }
    const T &operator[](size_t i) const {return items[i];}
};

int main() {
    Vector<std::string> a(10);
    a[0] = "哈哈";
    a[1] = "哈哈1";
    a[2] = "哈哈2";
    a[3] = "哈哈3";
    a[4] = "哈哈4";
    for(size_t i = 0; i < a.size(); i++) {
        std::cout << a[i];
    }
    std::cout << std::endl;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-21 18:09:04 | 显示全部楼层    本楼为最佳答案   
#include <iostream>

template<class T> class Vector {
private:
    size_t len;
    T *items;

public:
    Vector(size_t size = 10): len(size), items(new T[len]) {}
    ~Vector() {delete[] items;};
    void resize(size_t size) {
        if(size <= len) return;
        T *tmp = new T[size];
        for(size_t i = 0; i < len; i++) {
            tmp[i] = items[i];
        }
        delete[] items;
        items = tmp;
        len = size;
    }
    size_t size() {return len;}
    T &operator[](size_t i) {
        if(i > len) resize(i + 1);
        return items[i];
    }
    const T &operator[](size_t i) const {return items[i];}
};

int main() {
    Vector<std::string> a(10);
    a[0] = "哈哈";
    a[1] = "哈哈1";
    a[2] = "哈哈2";
    a[3] = "哈哈3";
    a[4] = "哈哈4";
    for(size_t i = 0; i < a.size(); i++) {
        std::cout << a[i];
    }
    std::cout << std::endl;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-8 09:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表