我正在处理一些遗留代码,我需要一个 StoreStrings 类来存储 一些字符串并能够返回 MyString*。
我试过这个:
typedef char MyString[64];
class StoreStrings{
public:
void store(MyString *aStr)
{
theVec.push_back(aStr);
}
const MyString* get(){return theVec.begin();}
private:
std::vector<MyString> theVec;
};
但我很失望,因为它不能用这种语法编译。
StoreStrings myStore;
myStore.store("Hello");//cannot convert parameter 1 from 'char [6]' to 'char (*)[64]'
我之前必须实例化一个 MyString。
MyString myStr = "Hello";
myStore.store(&myStr);
我如何重写 StoreStrings 类以便拥有 myStore.store("Hello");编译?
最佳答案
数组不能在 STL 容器中使用,因为它要求类型是可复制构造和可赋值的
您可以尝试以下方法,但是 std::string
方法是最好的。
typedef char MyString[64];
struct X{
MyString s;
};
class StoreStrings{
public:
void store(MyString aStr)
{
X temp ;
for(int i=0;aStr[i];++i)
temp.s[i] =*(aStr+i);
theVec.push_back(temp);
}
// Here iterator is returned.
const std::vector<X>::iterator get(){return theVec.begin();}
private:
std::vector<X> theVec;
};
int main(){
StoreStrings myStore;
MyString m ="Hello";
myStore.store(m);
}
关于c++ - char (*)[] 转换的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188711/