1

我正在学习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;
}
4

2 回答 2

0

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

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

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

于 2012-10-14T01:56:12.820 回答
0

哦好的。所以问题是你试图在这一行声明另一个由两个字符串组成的数组并为其分配另一个数组:

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

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

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

... 或者:

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

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

于 2012-10-14T01:58:28.247 回答