Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板。添加、获取元素char*_C++_Templates_Char_Containers - Fatal编程技术网

C++ 模板。添加、获取元素char*

C++ 模板。添加、获取元素char*,c++,templates,char,containers,C++,Templates,Char,Containers,我的模板类和将其用于char*时遇到问题。 我在类中存储元素并尝试添加或获取元素,但出现了分段错误。 对于char*类型,是否可以不进行类专业化 编辑1: 假设我不能更改main函数中的代码,只能更改类和方法,但没有专门化。是否可以处理字符* #include <iostream> #include <vector> using namespace std; template<class T> class test { public: void ad

我的模板类和将其用于char*时遇到问题。 我在类中存储元素并尝试添加或获取元素,但出现了分段错误。 对于char*类型,是否可以不进行类专业化

编辑1: 假设我不能更改main函数中的代码,只能更改类和方法,但没有专门化。是否可以处理字符*

#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;
}

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

在现代C++中,程序不应该编译,因为在C++ 11中禁止字符串字符串到非conchar字符的最终转换。
如果你想存储可修改的字符串,最好使用std::string。

我无法更改输入,所以唯一合理的选择是进行专业化,对吗?@whiteNinja:我不知道你的意思。用测试代替测试。问题是我不能改变这一点。只有班级和methods@whiteNinja请编辑您的问题并添加以下信息:您希望在发布的代码中实现什么以及您可以/不能更改什么。否则我们只是猜测。