2012-10-14 6 views
1

나는 cpp를 배우는 중입니다. 나는 맥의 커맨드 라인에서 g ++를 통해 컴파일하는 나의 일반적인 모드에서 오늘 프로그램을 작성했다. 나는 이중뿐만 아니라 엑스 코드에서 내 작품을 확인하고 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

문제를 보여주는 최소한의 실제 예제를 게시하십시오. 문맥에서 벗어나는 한 줄로 그것이 무엇인지 말하기는 어렵습니다. –

+0

좋아요, 조각을 추가했습니다 – awfulHack

답변

0

오, 확인. 그래서 문제는 당신이 그것으로 다른 배열을이 라인에 두 문자열의 다른 배열을 선언하고 할당하려고하는 것입니다 :

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

이 일반 배열 정말 합법적 없습니다. 크기가 지정되거나 지정되지 않은 포인터 여야합니다.

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

... 나 : 예를 들어 GCC는 비록 컴파일 이유

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

확실하지. 희망이 도움이됩니다!

+0

매우 유용합니다, 포인터는 여전히 신비로운 종류입니다 (Kernighan과 Ritchie의 장을 다시 읽음). – awfulHack

0

그것은처럼 보인다 subject에있는 하위 배열 중 하나를 새 배열에 할당하려고합니다. Xcode는 일반적으로 전체 배열을 다른 배열에 할당하지 않기 때문에 아마 이것을 좋아하지 않을 것입니다. g ++은 두 변수가 모두 string* 유형이라는 것을 알고 있기 때문에 잘 처리합니다. 포인터 변수에 포인터를 할당한다고 명시 적으로 Xcode에게 말하면 잘됩니다. 다음은 어디서나 컴파일해야합니다.

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

그냥 resultsubject에서 하위 배열의 내용의 사본을 포함하지 않는 것을 알고, 그것을 배열에 대한 참조 만입니다.

관련 문제