2014-02-11 98 views
0

我試圖通過pointer將各種string s傳遞給Struct的成員,但我正在做一些根本不正確的事情。我認爲它不需要被解除引用。下面的過程適用於其他類型的數據,如intchar。例如:將字符串指針傳遞給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

你實際上是例如,在location字段中定義15個字符串的數組。要麼使用常規字符串;即克.:

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]意味着你要創建一個string的15個實例,而且每個單個實例可以有文字的任何長度。

相反的d->location,你需要分配的15個字符串之一:d->location[0] = locationd->location[1] = location

相關問題