我正在学习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;
}
答案 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会编译它。希望它有所帮助!