2013-08-12 2 views
3

Я работаю с некоторым устаревшим кодом, и мне нужно, чтобы класс StoreStrings сохранял некоторые строки и мог возвращать MyString *.vector of char (*) [] casts

Я пытался с этим:

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"); компиляции?

+0

Convert.ToChar() ... –

+0

@RahulTripathi Это C#, не так ли? – Dukeling

+0

@rahul Я пробовал несколько возможных решений, даже используя string.c_str() Можете ли вы найти кусок кода на C++? – jimifiki

ответ

1

Массивы не могут быть использованы в 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); 
} 
+0

Является ли эта строка мне помочь? const MyString * get2() {return static_cast ((void *) & * theVec.begin());} Можно ли предположить, что X имеет тот же размер, что и MyString? – jimifiki

+0

Я предлагаю отредактировать цикл for с помощью \t \t \t strncpy (myTemp1.s, aFirst, sizeof (FMRtyLongString)); Значит ли это? – jimifiki

+0

Почему есть структура X {MyString s;}; копировать конструкцию и присваивать? А почему MyString нет? – jimifiki

1

Я хотел бы предложить что-то подобное

Storestring.h

#pragma once 
#include <vector> 
class StoreStrings 
{ 
public: 
void store(const char* aStr) 
{ 
    pszStr = new char[64]; 
    strcpy_s(pszStr,64,aStr); 
    theVec.push_back(pszStr); 
}; 
~StoreStrings(void){ 
for(std::vector<char*>::iterator it = theVec.begin();it!=theVec.end();++it){ 
delete *it; 
} 
}; 

std::vector<char*>::iterator getBegin(){return theVec.begin();}; 
std::vector<char*>::iterator getEnd(){return theVec.end();}; 
private: 
char* pszStr; 
std::vector<char*> theVec; 
}; 

main.cpp

#include "StoreStrings.h" 
#include <iostream> 
int main(void){ 
StoreStrings s; 
s.store("a"); 
s.store("b"); 
s.store("c"); 
for(std::vector<char*>::iterator it = s.getBegin();it!=s.getEnd();++it){ 
    std::cout << *it<<std::endl; 
} 
return 0; 
}; 
+0

Я тоже пытался что-то подобное. Я до сих пор получаю «невозможно преобразовать параметр 1 из« char * »в« const char (&) [64] », он компилируется вместе с вашим компилятором? – jimifiki

+0

Я действительно не проверял свое предложение. теперь я его отредактировал, и он компилируется и работает –