2012-10-14 131 views
1

我正在学习cpp。我今天在Mac的命令行中编写了一个通过g ++编译的正常模式的程序。我一直在双重检查我的XCode中工作,以及发现的代码行,导致该代码无法在IDE编译从多维数组中返回数组

线路:

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

,其中主体是一个多维数组其中的每个成员都是两个字符串的数组,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; 
} 
+0

数组没有很多功能。使用'std :: array'作为你期望的语义。 – chris

+0

请发表一个最小的工作示例来展示您的问题。很难说出与上下文中单一行的关系。 – 2012-10-14 01:12:50

+0

好的,我添加了一个片段 – awfulHack

回答

0

哦,好的。所以,问题是,你正试图宣称在这条线的两个字符串的另一个数组并指派另一个数组进去:

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

这不是普通的数组真正合法的。它应该是一个有或没有指定大小的指针。例如:

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

...或:

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

不知道为什么GCC编译它虽然。希望能帮助到你!

+0

非常有帮助,指针对我来说仍然有点神秘(再次阅读Kernighan和Ritchie的章节) – awfulHack

0

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

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

要知道,result不包含的子数组的内容复制在subject,它只是对数组的引用。