2015-03-05 4 views
-1

SO Я должен заполнить массив слов, чтобы потом получить доступ к ним. Пример: существительные = {«мальчик», «девушка», «дом»} и т. Д. Проблема в том, что я должен использовать массив точек char. Я пробовал это, но он бросает ошибку, говорящую об ошибке слишком много значений инициализатора. Вот кодкак инициализировать массив указателей символов для массива строк C++

class Sentence 
{ 
    private: 
    char* article[sz]; 
    char* verb[sz]; 
    char* preposition[sz]; 
    char* noun[sz]; 

, а позже я вызываю конструктор следующим образом, но он не заполняет их.

Sentence::Sentence() 
{ 
    article[10] = { "the", "a", "one", "some", "any" }; 
    verb[] = { "drove", "jumped", "ran", "walked", "skipped" }; 
    preposition[] = { "to", "from", "over", "under", "on" }; 
    noun[] = { "boy ", "girl", "dog", "town", "car" }; 
} 
+1

где sz определен? – mstbaum

+0

@Perrin Hawver Когда и где установлен sz? –

+0

также вы пытаетесь статически инициализировать индекс в своем массиве. это не имеет смысла. избавиться от 10 и квадратных скобок. – mstbaum

ответ

0

Если вам нужно инициализировать такие массивы фиксированного размера, вы можете сделать это в списке инициализаторов члена конструктора. Это невозможно сделать в теле конструктора.

Предполагается, что sz был объявлен, например,

static const size_t sz = 10; 

инициализация их с помощью конструктора, используя следующий синтаксис

Sentence::Sentence() 
: article{ "the", "a", "one", "some", "any" } 
, verb{ "drove", "jumped", "ran", "walked", "skipped" } 
, preposition{ "to", "from", "over", "under", "on" } 
, noun { "boy ", "girl", "dog", "town", "car" } { 
} 

В качестве альтернативы рассмотреть вопрос об использовании std::array<char,sz>, как указано в ответе Влада, или даже std::vector<std::string> как упомянуто Р. Сах. Любой из них должен также принять этот синтаксис инициализатора.

0

Если sz некоторая константа, то вы можете написать

#include <array> 

//... 

const size_t sz = 5; 

class Sentence 
{ 
    private: 
    std::array<const char *, sz> article; 
    std::array<const char *, sz> verb; 
    std::array<const char *, sz> preposition; 
    std::array<const char *, sz> noun; 

//... 

Sentence::Sentence() 
{ 
    article = { "the", "a", "one", "some", "any" }; 
    verb = { "drove", "jumped", "ran", "walked", "skipped" }; 
    preposition = { "to", "from", "over", "under", "on" }; 
    noun = { "boy ", "girl", "dog", "town", "car" }; 
} 

В противном случае вы можете использовать std::vector<const char *> вместо массивов.

#include <vector> 

//... 


class Sentence 
{ 
    private: 
    std::vector<const char *> article; 
    std::vector<const char *> verb; 
    std::vector<const char *> preposition; 
    std::vector<const char *> noun; 

//... 

Sentence::Sentence() 
{ 
    article = { "the", "a", "one", "some", "any" }; 
    verb = { "drove", "jumped", "ran", "walked", "skipped" }; 
    preposition = { "to", "from", "over", "under", "on" }; 
    noun = { "boy ", "girl", "dog", "town", "car" }; 
} 
1

Вы сказали:

я должен заполнить массив слов, так что я могу получить доступ к ним позже.

Если это является основным требованием, вы будете лучше использовать std::vector<std::string> вместо массивов char*.

class Sentence 
{ 
    public: 
     Sentence(); 

    private: 
     std::vector<std::string> articles; 
     std::vector<std::string> verbs; 
     std::vector<std::string> prepositions; 
     std::vector<std::string> nouns; 
}; 

Вы можете инициализировать члены с помощью:

Sentence::Sentence() : articles{ "the", "a", "one", "some", "any" }, 
         verbs{ "drove", "jumped", "ran", "walked", "skipped" }, 
         prepositions{ "to", "from", "over", "under", "on" }, 
         nouns{ "boy ", "girl", "dog", "town", "car" } 
{ 
} 

Вы можете добавлять элементы в коллекции, просто используя push_back на переменных-членов.

Смежные вопросы