从多维数组返回一个数组

时间:2012-10-14 01:04:53

标签: c++ xcode portability

我正在学习cpp。我今天在Mac的命令行中通过g ++编译正常模式编写了一个程序。我也在XCode中仔细检查我的工作,发现一行代码导致代码无法在IDE中编译

该行是:

string result[2] = subject[rand() % nsubject];

其中subject是一个多维数组的字符串,其中每个成员是两个字符串的数组,nsubject是一个包含数组长度的int。 Xcode表示:数组初始化程序必须是初始化程序列表,但如前所述,g ++编译时没有投诉。因此,作为语言的新手,我认为这种说法可能很糟糕。必须有一些方法可以让XCode找到可接受的,是吗?

这是一个可以证明问题的片段,从上下文中删除并没有多大意义,但是以下编译在我的终端上很好但没有在xcode中构建:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;

int main(){
    string subject[][2] = {
        {"a", "b"},
        {"c", "d"},
        {"e", "f"},
        {"g", "h"},
        {"i", "j"}
    };

    int nsubject = sizeof subject / sizeof subject[0];
    srand(static_cast<unsigned>(time(0)));
    string result[2] = subject[rand() % nsubject];
    cout << result[0] << endl; //should return 'a','c','e','g' or 'i'
    return EXIT_SUCCESS;
}

2 个答案:

答案 0 :(得分:0)

您似乎正在尝试将subject中的一个子数组分配给新数组。 Xcode可能不喜欢这样,因为你通常不会将整个数组分配给其他数组。 g ++正在处理它,因为它意识到两个变量都是string*类型。如果你明确告诉Xcode你正在指定一个指针变量的指针,你应该没问题。以下应该在任何地方编译。

string* result = subject[rand() % nsubject];

请注意result不包含subject中子数组内容的副本,它只是对数组的引用。

答案 1 :(得分:0)

哦,好的。所以问题是你试图在这一行上声明另一个包含两个字符串的数组,并为其指定另一个数组:

string result[2] = subject[rand() % nsubject];

这对普通数组来说并不合法。它应该是指定或不指定大小的指针。例如:

string *result = subject[rand() % nsubject];

......或:

string (&result)[2] = subject[rand() % nsubject];

不确定为什么gcc会编译它。希望它有所帮助!