模板。添加,获取元素 char*
Templates. adding , getting element char*
我的模板 class 将其用于 char* 时遇到问题。
我在 class 中存储元素并尝试添加或获取元素,但出现分段错误。
如果没有 class 类型 char* 的专门化,是否有可能?
编辑 1:
假设我不能更改 main 函数中的代码,只能更改 class 和方法,但没有专门化。是否可以处理 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;
}
您正在尝试修改常量字符串文字。这给出了未定义的行为;如果文字存储在写保护内存中,通常是分段错误。
在现代 C++ 中,该程序甚至不应该编译,因为从字符串文字到非常量 char*
的弃用转换最终在 C++11 中被禁止。
如果要存储可修改的字符串,最好使用 std::string
。
我的模板 class 将其用于 char* 时遇到问题。 我在 class 中存储元素并尝试添加或获取元素,但出现分段错误。 如果没有 class 类型 char* 的专门化,是否有可能?
编辑 1: 假设我不能更改 main 函数中的代码,只能更改 class 和方法,但没有专门化。是否可以处理 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;
}
您正在尝试修改常量字符串文字。这给出了未定义的行为;如果文字存储在写保护内存中,通常是分段错误。
在现代 C++ 中,该程序甚至不应该编译,因为从字符串文字到非常量 char*
的弃用转换最终在 C++11 中被禁止。
如果要存储可修改的字符串,最好使用 std::string
。