2014-02-11 2 views
0

Я пытаюсь передать различные string s в члены Struct через pointer, но я делаю что-то принципиально неправильное. Я думаю, что это не нужно разыгрывать. Процесс ниже работает для других типов данных, таких как int или char. Например:Передача строки указателю на структуру в C++

typedef struct Course { 
    string location[15]; 
    string course[20]; 
    string title[40]; 
    string prof[40]; 
    string focus[10]; 
    int credit; 
    int CRN; 
    int section; 
} Course; 


void c_SetLocation(Course *d, string location){ 
    d->location = location; 
    . . . 
} 

Я получаю ошибку, когда я пытаюсь скомпилировать следующий алгоритм инициализировать Course:

void c_Init(Course *d, string &location, ...){ 
     c_SetLocation(d, location[]); 
     . . . 

    } 

Ошибка:

error: cannot convert ‘const char*’ to ‘std::string* {aka std::basic_string<char>*}’ for argument ‘2’ to ‘void c_Init(Course*, std::string*, ..

ответ

1

Вы на самом деле определяя, например, массив из 15 строк в поле location. Либо используйте регулярные строки; е. г .:

typedef struct Course { 
    string location; 
    string course; 
    string title; 
    string prof; 
    string focus; 
    int credit; 
    int CRN; 
    int section; 
} Course; 

или использовать символьные массивы:

typedef struct Course { 
    char location[15]; 
    char course[20]; 
    char title[40]; 
    char prof[40]; 
    char focus[10]; 
    int credit; 
    int CRN; 
    int section; 
} Course; 
0

Когда вы объявляете char a[10], вы создаете массив из 10 символов. Когда вы объявляете std::string, вы создаете строку, которая может вырасти до произвольного размера. Когда вы объявляете std::string[15], вы создаете массив из 15 строк, которые могут вырасти до произвольного размера.

Вот что ваша структура должна выглядеть следующим образом:

typedef struct Course { 
    std::string location; 
    std::string course; 
    std::string title; 
    std::string prof; 
    std::string focus; 
    int credit; 
    int CRN; 
    int section; 
} Course; 
0

string location[15] означает, что вы хотите создать 15 экземпляров string, и каждый из этих отдельных случаев может иметь любую длину текста.

Вместо d->location, необходимо назначить один из этих 15 строк: d->location[0] = location, d->location[1] = location и т.д.

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