2012-07-13 62 views
0
#include<iostream> 
#include<string> 
using namespace std; 
int main(void) { 

    struct STRCT { 
     int num; 
     string str1, 
       arrStr1[], 
       str2, 
       arrStr2[]; 
    }; 

    int a; 
    string b[2], 
      c[3], 
      d, 
      e; 

    a = 10; 

    b[0] = "hello"; 
    b[1] = "world"; 

    c[0] = "stack"; 
    c[1] = "over"; 
    c[2] = "flow"; 

    d = "random"; 
    e = "text"; 

    //how do i intialize the arrays (arrStr1[] and arrStr2[]) in aStruct along with the rest of items? 
    //is it like this? 

    //i want aStruct[] to be an array and i want its size to be declared from the start to later be filled with vals 

    STRCT aStruct[2]; 

    //then later in the program i want to assign aStruct[] vals 

    aStruct[0] = {a,  //int 
        d,  //string 
        {b}, //string[] 
        e,  //string 
        {c}}; //string[] 
} 

所以基本上我想要一个结构数组与内部数组然后获得适当的vals,然后将适当的值分配给结构数组内的数组。感谢你在非常多的帮助在结构中初始化字符串数组

回答

0

在C++中,这是非法

string arr[2] = {"This","is"}; 
string arr1[2]; 

arr1 = arr; 

有没有像“复制整个阵列到另一个阵列”。数组元素必须单独复制。

第二你不能申报未知大小的数组

可以通过声明固定大小的字符串数组修改结构声明,并为此

for(int i =0; i< 2; i++) 
{ 

    aStruct[i].num = a; 
    aStruct[i].str1= d; 

    for(int j=0;j<2;j++) 
    { 
    arrStr1[i] = b[i]; 
    } 

    aStruct[i].str2= e; 

    for(int k=0;k<3;k++) 
    { 
    arrStr2[i] = c[i]; 
    } 
} 

我建议,而不是string arrStr1[]string arrStr2[]b[2]c[2]利用std::vector。这将有助于避免对for循环中的条件进行硬编码。

+0

感谢您的回复,我将在下周学习时尽快使用载体。所以没有办法通过类似于我所招募的方法直接填充arrStr1 []等。 – Tech 2012-07-13 06:02:19

+0

你试过你的方法吗?它工作吗? – Jeeva 2012-07-13 06:03:18

+0

不,编译器会抛出一个“expect; before {”error – Tech 2012-07-13 06:16:51

3

结构中的数组声明是非法的。 C++不支持无大小的数组声明作为类成员。即使某些C++编译器支持C99风格的“struct hack”声明,也只允许一个无尺寸的数组,并且该数组必须是该结构的最后一个成员。

你想在你的结构中有数组 - 你必须给它们特定的编译时间大小。没有特定的编译时间大小,你将不得不使用指针或std::vector

在您的示例中b具有大小2c具有大小3。你可以用相同的尺寸

struct STRCT { 
    int num; 
    string str1, arrStr1[2], str2, arrStr2[3]; 
}; 

声明你的结构,并对其进行初始化如下

STRCT aStruct[2] = 
{ 
    { 
    a, 
    d, 
    { b[0], b[1] }, 
    e, 
    { c[0], c[1], c[2] } 
    } 

    // The rest of the array is value-initialized 
}; 

这只是就你可以用普通数组获得。它需要更灵活的东西,将数组直接嵌入到结构中并不会帮助你。要么手动构建必要的内存结构,要么使用std::vector

+0

ok ,但最后我会怎么做,如果我想要arrStr1 []的大小等于b []的大小,而不知道b []的大小是否在手 可以说我声明的大小b []由使用用户输入 然后我会如何初始化arrStr1 [(size of b)]结构体? – Tech 2012-07-14 04:04:04