C++ 模板。添加、获取元素char*
我的模板类和将其用于char*时遇到问题。 我在类中存储元素并尝试添加或获取元素,但出现了分段错误。 对于char*类型,是否可以不进行类专业化 编辑1: 假设我不能更改main函数中的代码,只能更改类和方法,但没有专门化。是否可以处理字符*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
#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请编辑您的问题并添加以下信息:您希望在发布的代码中实现什么以及您可以/不能更改什么。否则我们只是猜测。