模板。添加,获取元素char *

时间:2015-05-15 11:33:18

标签: c++ templates char containers

我的模板类出了问题并将其用于char *。 我在类中存储元素并尝试添加或获取元素,但出现分段错误。 没有类型char *?

的类专门化是否可能

编辑1: 让我们假设我不能改变主函数中的代码,而是改变类和方法,但没有专门化。是否可以处理char *? ;)

#include <iostream>
#include <vector>
using namespace std;

template<class T>
class test
{
public:
    void addItem(T element){
        elements.push_back(element);
    }

    T getItem(int i){
        return elements[i];
    }

    vector<T> elements;
};

int main()
{
    char * cpt[]={"tab","tab2","tab3"};
    test<char*> test1;
    test1.addItem(cpt[1]);
    char * item=test1.getItem(0);
    //Segmentation fault
    // could it be done without specialisation class for char*    ?
    item[0]='Z';
    cout<<item<<endl;
    for(auto v:test1.elements) cout<<v<<endl;
    return 0;
}

My code

1 个答案:

答案 0 :(得分:0)

您正在尝试修改常量字符串文字。这给出了未定义的行为;如果文字存储在写保护存储器中,则通常是分段错误。

在现代C ++中,程序甚至不应该编译,因为在C ++ 11中最终禁止从字符串文字到非常量char*的不推荐的转换。

如果您想存储可修改的字符串,那么您最好使用std::string