我的模板类出了问题并将其用于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;
}
答案 0 :(得分:0)
您正在尝试修改常量字符串文字。这给出了未定义的行为;如果文字存储在写保护存储器中,则通常是分段错误。
在现代C ++中,程序甚至不应该编译,因为在C ++ 11中最终禁止从字符串文字到非常量char*
的不推荐的转换。
如果您想存储可修改的字符串,那么您最好使用std::string
。